2012-02-08 2 views
1

У меня есть ComboBox и TextBox и вы хотите включить/отключить только TextBox, когда первый элемент выбран в ComboBox.Understandig DataTrigger

Этот код работает: (отключить при выборе первого пункта)

  <ComboBox SelectedIndex="{Binding Mode}"> 
       <ComboBoxItem>Mode 1</ComboBoxItem> 
       <ComboBoxItem>Mode 2</ComboBoxItem> 
       <ComboBoxItem>Mode 3</ComboBoxItem> 
      </ComboBox> 
       <TextBox Text="{Binding ValueNotForMode1}"> 
        <TextBox.Style> 
         <Style> 
          <Style.Triggers> 
           <DataTrigger Binding ="{Binding Mode}" Value="0"> 
            <Setter Property="TextBox.IsEnabled" Value="False"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBox.Style> 
       </TextBox> 

Это один не работает: (включить, если выбран первый элемент)

  <ComboBox SelectedIndex="{Binding Mode}"> 
       <ComboBoxItem>Mode 1</ComboBoxItem> 
       <ComboBoxItem>Mode 2</ComboBoxItem> 
       <ComboBoxItem>Mode 3</ComboBoxItem> 
      </ComboBox> 
       <TextBox IsEnabled="False" Text="{Binding ValueForMode1}"> 
        <TextBox.Style> 
         <Style> 
          <Style.Triggers> 
           <DataTrigger Binding ="{Binding Mode}" Value="0"> 
            <Setter Property="TextBox.IsEnabled" Value="True"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBox.Style> 
       </TextBox> 

Не возможно для включения управления через DataTrigger?

Или как я могу контролировать элемент управления, что делать, когда триггер не возникает?

ответ

3

Переместить IsEnabled="False" с вашего TextBox на ваш TextBox.Style.

<Setter Property="TextBox.IsEnabled" Value="False" /> 

См. Dependency Property Value Precedence для более четкого понимания.

+0

Это работает, спасибо. Знаете ли вы, почему это не нужно в первом случае? Я считаю, что это потому, что True является значением по умолчанию. – MTR

+0

Да, вот в чем причина. – LPL