WPF MahApps.Metro Tabcontrol 数据绑定?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12050767/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
WPF MahApps.Metro Tabcontrol data bound?
提问by Peter
Well im trying to bind a TabControl to a datasource while using the MahApps.Metro style
好吧,我尝试在使用 MahApps.Metro 样式时将 TabControl 绑定到数据源
Window xaml:
窗口 xaml:
<Controls:MetroWindow x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<TabControl ItemsSource="{Binding Collection}">
<TabControl.ItemTemplate>
<DataTemplate>
<TabItem Header="{Binding Title}">
<ContentControl Content="{Binding Content}" />
</TabItem>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</Controls:MetroWindow>
Codebehind:
代码隐藏:
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : MetroWindow
{
public MainWindow()
{
InitializeComponent();
Collection = new ObservableCollection<Item>()
{
new Item("Test1", 1),
new Item("Test2", 2),
new Item("Test3", 3)
};
this.DataContext = this;
}
public ObservableCollection<Item> Collection
{ get; set; }
}
This works some what but the TabControl looses some of its style (active selection style) and it gets hard to click a tab (you can't click it directly you have to click right in front of it), does any one have a solution for this problem?
这有点作用,但是 TabControl 失去了它的一些样式(活动选择样式)并且很难单击一个选项卡(您不能直接单击它,您必须在它的正前方单击),有没有人有解决方案对于这个问题?


回答by Ally
The DataTemplate for TabControl.ItemTemplate would be a TabItem already so no need to put that in.
TabControl.ItemTemplate 的 DataTemplate 已经是 TabItem,因此无需将其放入。
This should work:
这应该有效:
<TabControl ItemsSource="{Binding Collection}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>

