在控件模板中访问数据模板的元素



我有一个带有ItemTemplateSelector的ListBox。模板选择器返回的所有数据模板都有一个Border。我想在鼠标悬停时更改边框的背景颜色。为了实现这一点,我在列表框中添加了一个ListBoxItem控件模板,该模板带有IsMouseOver的触发器,但我不知道如何从触发器的setter引用数据模板的border。我最好的选择是下面的二传手,但没有效果:

<Trigger Property="IsMouseOver" Value="True">
    <Setter Property="Border.Background" Value="Yellow" />
</Trigger>

有没有一种方法可以在XAML中做到这一点,或者在代码中深入查看可视化树以找到边界?

我还想在ListBox中选择项目时更改Border的背景色。我知道我可以用ListBoxItem样式更改Foreground,如下所示:

            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Foreground" Value="Red"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListBox.ItemContainerStyle>

但与Foreground不同,Background不是继承的,因此DataTemplate中的Border将不会接收到触发器的笔刷。

当使用数据模板中的数据触发器在ListBox中选择项目时,我能够更改BorderBackground

        <DataTemplate DataType="{x:Type model:Topic}" x:Key="TopicNameDataTemplate">
            <Grid>
                <Border x:Name="Border" ... >
                    ...
                </Border>
            </Grid>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                             Value="True">
                    <Setter TargetName="Border" Property="Background" Value="Orange"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>

相关内容

  • 没有找到相关文章

最新更新