2010-06-03 17 views
5

Sadece WPF'yi öğreniyorum ve biraz yardım alabilirim. TabControl kullanan ve her sekmede tek bir TextBox'um var ve şimdi sekme (VisualStudio gibi) olmayan araç çubuğuna bir geri alma düğmesi eklemek istiyorum, dinamik olarak yeni sekmeler üreten bir uygulama var. Geri al düğmesi sadece etkin sekmede bulunan TextBox'ta çalışmalıdır ve eğer sekme yoksa veya geri alınamazsa devre dışı bırakılır. Ve bu iki öğeyi nasıl bağlayacağımı bilmiyorum (Sekme içeriğinin xaml dosyası var).TabItem Binding WPF

Ben Menuıtem bir tık eventhandler eklenmesi ve ardından adıyla etkin sekmede metin kutusu bulma, ama keşke ediyorum gibi şimdi etkinleştirmek/devre dışı olamaz olduğu başarılı tek şey.

Umarım anlaşılabilir bir şeydir. herhangi bir yardım

cevap

0

için teşekkürler Ne istiyorsun sen böyle devam TabControl seçtiği sayfasını kontrol ve hangi bir yerleşik "CanExecute" olayı vardır, Temelde WPF's built-in Command system. ile çok kolay yapılırdı. Çalışmak için herhangi bir örnek kod olmaksızın somut bir örnek vermek zordur, ama umarız bu sizi doğru yola koyacaktır.

8

Bu senaryo hakkında bilgi almak için "sağ WPF yolunu" örneklendirmek için bir örnek hazırladım. Yine de, sahip olduğunuz kodla eşleşmeyebilir, ancak kodunuzu nasıl uyarlayacağınız konusunda size bazı fikirler vermelidir. İlk olarak, arka planda kodlama: Burada

public partial class TabItemBinding : Window 
{ 
    public ObservableCollection<TextItem> Items { get; set; } 

    public TabItemBinding() 
    { 
     Items = new ObservableCollection<TextItem>(); 

     Items.Add(new TextItem() { Header = "1", Content = new TextBox() { Text = "First item" } }); 
     Items.Add(new TextItem() { Header = "2", Content = new TextBox() { Text = "Second item" } }); 
     Items.Add(new TextItem() { Header = "3", Content = new TextBox() { Text = "Third item" } }); 

     InitializeComponent(); 
    } 
} 

public class TextItem 
{ 
    public string Header { get; set; } 
    public FrameworkElement Content { get; set; } 
} 

Hiçbir şey deli, ben sadece bir model sınıf oluşturma ve bu sınıfın bir koleksiyon kuruyorum. Gerçek iyilik XAML olur: Ben otomatik sürece biz aktif bir düzenleme TextBox sahip olarak bizim için geri alma ilgilenir olan ApplicationCommands.Undo için Button kanca

<Window x:Class="TestWpfApplication.TabItemBinding" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="TabItemBinding" Height="300" Width="300" 
DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <ToolBar Grid.Row="0"> 
     <Button Command="Undo">Undo</Button> 
    </ToolBar> 

    <TabControl Grid.Row="1" ItemsSource="{Binding Items}"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="TabItem"> 
       <Setter Property="Header" Value="{Binding Header}"/> 
       <Setter Property="Content" Value="{Binding Content}"/> 
      </Style> 
     </TabControl.ItemContainerStyle> 
    </TabControl> 
</Grid> 

. TabControl'un kendisi, kodun arkasına yazdığımız koleksiyona bağlanır; bu, bir başlık ve düzenlenecek bir metin sağlayacaktır. Ve yaptığımız tüm düzenlemeler geri alınamaz. Sonuç: Bu arada

Screenshot http://img706.imageshack.us/img706/2866/tabitembinding.png

, aktif bir düzenleme bağlam yoksa geri alma komutu kendini otomatik olarak devre dışı bırakır dikkat etmek önemlidir. Dolayısıyla, sekme sayfası yoksa, bölümümüzde herhangi bir ekstra kod olmadan devre dışı bırakılacaktır.

+0

Merhaba teşekkürler, ihtiyacım olan tam olarak bu, ama aslında ben AvalonDock (http://avalondock.codeplex.com/) kullanıyorum ve "sekmeler" aslında belgeler. Sorun şu ki, çalışmasını sağlamak için özellikleri ayarlayamıyorum, eğer kodumu gönderirsem bana yardımcı olabilir misiniz? – Zviri

+1

Evet, kesinlikle deneyeceğim. Ama önce cevabımı kabul etmeli ve cevap vermelisiniz, sonra burada sorulan soru yeterince cevaplandığından, muhtemelen yeni bir soruda AvalonDock kodunu yazmalısınız. – Charlie

+0

TabItem'i bir radyo çubuğuna nasıl bağlarım? – user2495173

0

Sen WPF Application Framework (WAF) projenin Yazar örnek uygulamada ilginizi çekebilir. Tabbed MDI (Visual Studio'ya benzer) ile basit bir düzenleyiciyi gösterir ve Geri Al/Yinele işlevini uygular. Tam olarak aradığınız şey bu olabilir.