我创建了一个TabControl。在它里面,我希望每个“页面”都有一个不同的造型。所以我试着把ContentType搞得一团糟。现在,如果我使用一个静态引用,它工作得很好,但是我想要做的是做一些动态的事情。因此,我正在考虑在我给tabcontrol的类中插入一个字符串(List_OpenPage.ItemSource = pages),一个类似于Home的值。然后,我将ContentTemplate设置为{StaticResource ResourceKey={Binding Style}},其中样式是对名为页面的列表的引用。(实际上,如果我调用list.page,我应该得到一个字符串,比如home或test)。这个想法行不通..。你知道怎么做吗?
<TabControl Name="List_OpenPage" BorderThickness="0" Style="{DynamicResource TabControlStyle1}" ContentTemplate="{StaticResource Home}">
<TabControl.Resources>
<SolidColorBrush x:Key="TabItem.Selected.Background" Color="LightGray"/>
<SolidColorBrush x:Key="TabItem.Selected.Border" Color="#ACACAC"/>
<Style x:Key="TabControlStyle1" TargetType="{x:Type TabControl}">
// Some ignorable styling \\
</Style>
</TabControl.Resources>
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" Margin="2" FontSize="13"/>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>-数据模板
<Window.Resources>
<DataTemplate x:Key="Home">
<ListView ItemsSource="{Binding Datas}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="Red">
</ListView>
</DataTemplate>
<DataTemplate x:Key="test">
<ListView ItemsSource="{Binding Datas}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="LightGray">
</ListView>
</DataTemplate>
</Window.Resources>//
public class Page
{
public string Title { get; set; }
public string Style { get; set; } (will be home or test for this example)
public List<Result.Data> Datas { get; set; }
}发布于 2020-09-15 13:26:58
这样做的方法是定义一个DataTemplateSelector并使用TabControl.ContentTemplateSelector属性,例如:
public class CustomTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is Page page)
return Application.Current.MainWindow?.FindResource(page.Style) as DataTemplate;
return null;
}
}XAML:
<TabControl ...>
<TabControl.ContentTemplateSelector>
<local:CustomTemplateSelector />
</TabControl.ContentTemplateSelector>
</TabControl>https://stackoverflow.com/questions/63901715
复制相似问题