2013-05-08 4 views
6

У меня есть ComboBox и Button на моем основном изображении, и я хочу применить стиль к кнопке так, чтобы, когда индекс combobox установлен в 1, кнопка становится видимой (изначально она скрыта). Это мой XAML код:Устранение неполадок DataTrigger в WPF

<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> 

Кто-то уже задавал вопрос об этом here, и я делаю почти то же самое, но он не работает, кнопка остается скрытой, даже если индекс изменяется до 1. Сначала выполняется заполнение комобокса в коде с двумя элементами. Любая помощь приветствуется.

ответ

15

Проблема заключается в том, что значения свойств зависимостей, установленные локально (например, с видимостью), имеют более высокий приоритет, чем те, которые установлены из триггера стиля. Таким образом, даже когда срабатывает триггер, он не будет отменять значение, которое вы уже установили.

Самое простое решение вместо этого установить значение по умолчанию в стиле 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> 

И теперь ваш триггер будет переопределить значение свойства, когда он ударил.

Пока вы на нем, вы должны взглянуть на this link, в котором указан порядок приоритета для установки значений DP.

Смежные вопросы