[英]WPF Dynamic Style Control
我創建了一個 TabControl。 在里面,我希望每個“頁面”都有不同的樣式。 所以我試着把 ContentType 搞得一團糟。 現在,如果我使用靜態引用,它工作得很好,但我想做的是做一些動態的事情。 所以我想在我給 tabcontrol (List_OpenPage.ItemSource = pages) 的類中插入一個字符串,一個像 Home 這樣的值。 然后我將 ContentTemplate 設置為如下{StaticResource ResourceKey={Binding Style}}
,其中 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; }
}
這樣做的方法是定義一個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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.