Проблемы с установкой в DataTrigger в WPF
у меня есть ComboBox
и Button
на моем основном представлении, и я хочу применить стиль к кнопке, чтобы, когда индекс combobox установлен в 1, кнопка стала видимой (изначально она скрыта). Это мой код XAML:
<Grid>
<StackPanel Orientation="Vertical" Margin="10">
<ComboBox Name="comboBox"/>
<Button Name="myBtn" Content="Hello" Visibility="Hidden">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>
кто-то уже задал вопрос об этом здесь, и я делаю почти то же самое, но это не работает, кнопка остается скрытой, даже когда индекс изменяется на 1. Первоначально comobox заполняется в коде за 2 вещи. Любая помощь приветствуется.
1 ответов
проблема в том, что значения свойств зависимостей, установленные локально (как вы сделали с видимостью), имеют более высокий приоритет, чем те, которые установлены из триггера стиля. Таким образом, даже когда триггер нажат, он не будет переопределять значение, которое вы уже установили.
простое решение-вместо этого установить значение по умолчанию в стиле Setter
:
<Button Name="myBtn" Content="Hello">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
и теперь ваш триггер переопределит значение свойства при его нажатии.
пока вы на нем, вы должны иметь посмотреть этой ссылке в этом списке указан порядок приоритета для установки значений DP.