访问控制模板中的数据模板元素

时间:2016-03-23 21:35:27

标签: wpf xaml templates styles

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

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

有没有办法在XAML中执行此操作,或者可能在代码中向下钻取可视树以某种方式找到边框?

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

            <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不会被继承,因此Border中的DataTemplate将不会收到触发器的刷子。

1 个答案:

答案 0 :(得分:0)

当使用数据模板中的数据触发器在Background中选择项目时,我能够更改Border的{​​{1}}。

ListBox