如何从列表框项目选择事件更改另一个控件的属性?

时间:2011-12-05 15:34:03

标签: wpf coding-style triggers listbox datatrigger

我有一个列表框和包装文本框的边框。我希望能够根据列表框中是否选择任何项目来更改边框背景的样式。

原因是我使用代码隐藏来确保在某些条件下没有选择任何项目,所以当选择列表框中的项目时我想显示它。

<Border x:Name="brdMyBorder" BorderBrush="Black" BorderBackground="Blue">
    <TextBox ... />
</Border>

<ListBox x:Name="lstMyListBox" ItemsSource="{Binding Items}" SelectionChanged="listbox_selectionchanged" />

我意识到我总是可以在SelectionChanged事件中设置背景,但我宁愿以某种方式使用xaml触发器。我不知道怎么回事。 Border上允许的唯一触发器似乎是EventTrigger。

2 个答案:

答案 0 :(得分:1)

将样式与DataTriggers一起使用

<Style x:Key="MyBorderStyle" TargetType="{x:Type Border}">
    <Setter Property="Background" Value="Blue" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=lstMyListBox, Path=SelectedIndex}" Value="-1">
            <Setter Property="Background" Value="Red" />
        </DataTrigger>
    </Style.Triggers>

</Style>

请注意,您必须在样式中设置默认背景颜色,否则Background标记中指定的<Border>将始终覆盖触发值。

答案 1 :(得分:0)

如何使用<EventTrigger RoutedEvent="SelectionChanged">