WPF扩展器 - 鼠标悬停时突出显示标题

时间:2015-02-22 22:08:08

标签: c# wpf xaml

我有一个ItemsControl,其中datatemplate是一个扩展器。下面是用于exapnder标题的模板和样式。

<DataTemplate x:Key="expanderHeader">
    <ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue"/>
    <DataTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="TextBlock.FontWeight" Value="Bold"/>
        </Trigger>
    </DataTemplate.Triggers>
</DataTemplate>

<Style TargetType="Expander">
    <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/>
</Style>

当鼠标移过实际的标题文本时,标题会以粗体显示,但我想要的是如果鼠标位于扩展器的任何部分上,则标题文本将加粗。为了解决这个问题,我认为我需要将触发器移动到扩展器样式本身,但是在这里我不确定如何确保只有标头而不是扩展器中的所有内容都是粗体,这是当我使用以下样式时会发生的情况:

    <Style TargetType="Expander">
        <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="TextBlock.FontWeight" Value="Bold" />
            </Trigger>
        </Style.Triggers>           
    </Style>

我如何调整上述内容,以便只有当文件移动到扩展器的任何部分时(当扩展时),只有标题文本以粗体显示。

1 个答案:

答案 0 :(得分:2)

我能提出的最简单的解决方案是创建第二个DataTemplate以切换到鼠标悬停。

<DataTemplate x:Key="expanderHeader">
    <ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue"/>
</DataTemplate>
<DataTemplate x:Key="expanderHeaderMouseOver">
    <ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue" TextElement.FontWeight="Bold"/>
</DataTemplate>

然后更改扩展器的样式以将鼠标悬停在HeaderTemplate上...

<Style TargetType="Expander">
    <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeaderMouseOver}"/>
        </Trigger>
    </Style.Triggers>
</Style>

显然这意味着你需要维护2个数据模板,这不是很理想......那里可能有更好的解决方案(可能使用附加属性)但是我无法得到任何其他工作。< / p>