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.
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
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
TabItem'i bir radyo çubuğuna nasıl bağlarım? – user2495173