2013-11-01 3 views
2

У меня есть два GroupBoxes, которые используют CheckBoxes A и B в качестве своего заголовка. То, что я хочу, - это когда B проверен, я также хочу, чтобы A был проверен. A активируется только тогда, когда B не установлен. У меня есть следующий код:Триггер работает для IsEnabled, но не проверен в CheckBox

<GroupBox> 
      <GroupBox.Header> 
       <CheckBox Name="A"> 
        <CheckBox.Style> 
         <Style TargetType="{x:Type CheckBox}"> 
          <Setter Property="IsEnabled" Value="False" /> 
          <Style.Triggers> 
           <MultiDataTrigger> 
            <MultiDataTrigger.Conditions> 
             <Condition Binding="{Binding ElementName=B, Path=IsChecked}" Value="True" /> 
            </MultiDataTrigger.Conditions> 
            <Setter Property="IsEnabled" Value="False" /> 
            <Setter Property="IsChecked" Value="True" /> 
           </MultiDataTrigger> 
           <MultiDataTrigger> 
            <MultiDataTrigger.Conditions> 
             <Condition Binding="{Binding ElementName=B, Path=IsChecked}" Value="False" /> 
            </MultiDataTrigger.Conditions> 
            <Setter Property="IsEnabled" Value="True" /> 
           </MultiDataTrigger> 
          </Style.Triggers> 
         </Style> 
        </CheckBox.Style> 
        Check Box A 
       </CheckBox> 
      </GroupBox.Header> 
     </GroupBox> 
     <GroupBox> 
      <GroupBox.Header> 
       <CheckBox Name="B"> 
        Check Box B 
       </CheckBox> 
      </GroupBox.Header> 
     </GroupBox> 

У меня есть проблема, когда я снимите флажок Check Box B, A Флажок также будет снят. Что не так с моими триггерами?

+0

Вы не можете использовать привязку 'ElementName' внутри триггера' Style'. Для этих элементов пользовательского интерфейса вам необходимо «ControlTemplate» или «DataTemplate», чтобы предоставить общий [NameScope] (http://msdn.microsoft.com/en-us/library/ms746659.aspx). –

+0

в порядке. Я попробую. Но срабатывает триггер. Он включает/отключает флажок B. – Unplug

ответ

2

Система триггера применит сеттер, когда условие триггера выполнено. Когда условие триггера не выполняется, все триггерные сеттеры возвращаются к исходному значению. Это говорит о том, что вы не можете использовать триггеры для этой цели. Лучший способ добиться этого - установить его из кода в Checked eventhandler.

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