微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TabControl.Resource DataTemplate 使用图标代替文本

如何解决TabControl.Resource DataTemplate 使用图标代替文本

我有一个项目,它使用 TabControlDataTemplates 将选项卡添加到视图中,如下所示:

<TabControl Name="dcTabControl"
            ItemsSource="{Binding Tabs}"
            SelectedItem="{Binding SelectedTabviewmodel}"
            Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.MainContentHeight}">
    <TabControl.Resources>

        <!-- Removed numerous other tabs to save space -->

        <!-- System Setup tab -->
        <DataTemplate DataType="{x:Type vm:SystemSetupviewmodel}">
            <ScrollViewer HorizontalScrollBarVisibility="Auto" 
                          VerticalScrollBarVisibility="Auto">
                <v:SystemSetupUserControl />
            </ScrollViewer>
        </DataTemplate>

        <!-- About tab -->
        <DataTemplate DataType="{x:Type vm:Aboutviewmodel}">
            <ScrollViewer HorizontalScrollBarVisibility="Auto" 
                          VerticalScrollBarVisibility="Auto">
                <v:AboutUserControl />
            </ScrollViewer>
        </DataTemplate>

    </TabControl.Resources>
</TabControl>

每个 viewmodel 都有一个 Header 属性,用于填充选项卡的文本(例如“关于”)。

我现在需要将“关于”文本更改为图标。我试过了,但它没有改变任何东西。

         <!-- About tab -->
        <DataTemplate DataType="{x:Type vm:Aboutviewmodel}">
            <TabItem>
                <TabItem.Header>
                    <Image Name="AboutTabImage" Height="auto" Width="auto" Source="Images/About.png" />                        
                </TabItem.Header>
                <TabItem.Content>
                    <ScrollViewer HorizontalScrollBarVisibility="Auto" 
                                  VerticalScrollBarVisibility="Auto">
                        <v:AboutUserControl />
                    </ScrollViewer>                        
                </TabItem.Content>
            </TabItem> 
        </DataTemplate>

如何用图标代替文本?

UPDATE 添加代码显示 Header 属性如何绑定到 Tab。

使用此 HeaderTab 绑定到 Style

<!-- Standard Tab Style -->
<Style x:Key="TabStyle" targettype="{x:Type TabItem}">
    <Setter Property="Header" Value="{Binding Header}" />
    <Setter Property="Width" Value="Auto" />
    <Setter Property="Padding" Value="10,5,10,5" />
</Style>

我现在想我必须创建一个新样式才能使用图标而不是文本,但不确定如何将该样式应用于数据模板。

解决方法

如果 DataTrigger 属性包含字符串“About”,您可以向 TabItem 样式添加一个 Header,将标题更改为图像:

<Style TargetType="TabItem">
    ...
    <Setter Property="Header" Value="{Binding Header}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Header}" Value="About">
            <Setter Property="Header">
                <Setter.Value>
                    <Image Source="Images/About.png"/>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。