Проблемы с установкой в 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.