首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF动态样式控制

WPF动态样式控制
EN

Stack Overflow用户
提问于 2020-09-15 12:19:39
回答 1查看 49关注 0票数 1

我创建了一个TabControl。在它里面,我希望每个“页面”都有一个不同的造型。所以我试着把ContentType搞得一团糟。现在,如果我使用一个静态引用,它工作得很好,但是我想要做的是做一些动态的事情。因此,我正在考虑在我给tabcontrol的类中插入一个字符串(List_OpenPage.ItemSource = pages),一个类似于Home的值。然后,我将ContentTemplate设置为{StaticResource ResourceKey={Binding Style}},其中样式是对名为页面的列表的引用。(实际上,如果我调用list.page,我应该得到一个字符串,比如home或test)。这个想法行不通..。你知道怎么做吗?

代码语言:javascript
复制
   <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>

-数据模板

代码语言:javascript
复制
  <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>

//

代码语言:javascript
复制
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; }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 13:26:58

这样做的方法是定义一个DataTemplateSelector并使用TabControl.ContentTemplateSelector属性,例如:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<TabControl ...>
    <TabControl.ContentTemplateSelector>
        <local:CustomTemplateSelector />
    </TabControl.ContentTemplateSelector>
</TabControl>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63901715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档