[英]WPF Dynamic Style Control
I created a TabControl.我创建了一个 TabControl。 Inside it I want every "Page" to have a different styling.
在里面,我希望每个“页面”都有不同的样式。 So I tryed to mess a little bit up with ContentType.
所以我试着把 ContentType 搞得一团糟。 Now if I use a static reference it works just fine but what I was trying to do is to do something dynamic.
现在,如果我使用静态引用,它工作得很好,但我想做的是做一些动态的事情。 So I was thinking about inserting a string in the class I was giving to the tabcontrol (List_OpenPage.ItemSource = pages) a value like Home.
所以我想在我给 tabcontrol (List_OpenPage.ItemSource = pages) 的类中插入一个字符串,一个像 Home 这样的值。 Then I set the ContentTemplate as follow
{StaticResource ResourceKey={Binding Style}}
where Style is a reference to the List called page.然后我将 ContentTemplate 设置为如下
{StaticResource ResourceKey={Binding Style}}
,其中 Style 是对被称为页面的列表的引用。 (indeed if I call list.page i should get a string like home or test). (实际上,如果我调用 list.page 我应该得到一个像 home 或 test 这样的字符串)。 This idea doesnt work.. So do you have any idea how to make it work?
这个想法行不通..那么你知道如何让它发挥作用吗?
<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>
-- Data Templates -- 数据模板
<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; }
}
The way to do this would be to define a DataTemplateSelector
and use the TabControl.ContentTemplateSelector property, eg:这样做的方法是定义一个
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: XAML:
<TabControl ...>
<TabControl.ContentTemplateSelector>
<local:CustomTemplateSelector />
</TabControl.ContentTemplateSelector>
</TabControl>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.