2011-06-07 18 views
10

Tengo el siguiente ..Cómo aplicar estilo de disparo a DataTemplate en WPF

<ComboBox Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding ShipperAddresses}" Text="{Binding ShipperAddress}" Margin="85,2,0,2"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBox AcceptsReturn="True" Width="200" Height="100"/> 
      <DataTemplate.Resources> 
       <Style TargetType="{x:Type TextBox}"> 
        <Setter Property="IsReadOnly" Value="True"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Tag}" Value="False"/> 
        </Style.Triggers> 
        </Setter> 
       </Style> 
      </DataTemplate.Resources> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

El problema es que no se puede aplicar una Style.Trigger que estoy tratando de hacer dentro de un DataTemplate . Entonces mi pregunta es ¿cómo aplicarías crear un disparador para que una propiedad en el DataTemplate cambie en función del padre?

SOLUCIÓN FINAL:

Tomé lo que me dio Souvik y fijó para arriba ya que había algunos problemas. Aquí está el resultado final.

<ComboBox Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding ShipperAddresses}" Text="{Binding ShipperAddress}" DisplayMemberPath="Value" Margin="85,2,0,2"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBox AcceptsReturn="True" Width="200" Height="100" Text="{Binding Path=Value}"/> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=IsEditable}" Value="False"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
      <ComboBox.Resources> 
       <Style TargetType="{x:Type ComboBox}"> 
        <Setter Property="IsEditable" Value="True"/> 
        <Style.Triggers> 
         <Trigger Property="IsDropDownOpen" Value="True" > 
          <Setter Property="IsEditable" Value="False"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 

      </ComboBox.Resources> 

Respuesta

8

Tienes DataTemplate gatillo de disparo en lugar de Estilo:

<ComboBox Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding ShipperAddresses}" Text="{Binding ShipperAddress}" Margin="85,2,0,2"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox AcceptsReturn="True" Width="200" Height="100"/> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Tag}" Value="False"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 
+0

suficientemente cerca (mi antepasado no era un cuadro combinado de un cuadro de grupo .. y no había nada en la etiqueta de valor para mí) –

+0

sentimos que estaba probándolo en mi entorno y olvidé eliminar la cosa de GroupBox y Tag antes de publicar. Feliz de que funcionó para ti :) –

Cuestiones relacionadas