2010-01-27 15 views
6

Ésta es mi XAML:WPF: ¿Cómo establecer la propiedad de primer plano de un TextBlock usando DataTrigger

<TextBlock Name="SeverityText" 
      Grid.Column="1" 
      Grid.Row="0" 
      Foreground="Red"> 
    <TextBlock.Triggers> 

     <DataTrigger Binding="{Binding Path=Severity}"> 
      <DataTrigger.Value> 
       <sm:Severity>Warning</sm:Severity> 
      </DataTrigger.Value> 
      <Setter TargetName="SeverityText" 
        Property="Foreground" 
        Value="Yellow" /> 
     </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Severity}"> 
      <DataTrigger.Value> 
       <sm:Severity>Information</sm:Severity> 
      </DataTrigger.Value> 
      <Setter TargetName="SeverityText" 
        Property="Foreground" 
        Value="White" /> 
     </DataTrigger> 


    </TextBlock.Triggers> 
    <TextBlock>Severity:</TextBlock> 
    <TextBlock Text="{Binding Path=Severity}" /> 
</TextBlock> 

Este es mi mensaje de error:

¿No encuentra el miembro estático 'ForegroundProperty' en el tipo 'ContentPresenter'.

sm: Gravedad es una enumeración que importé.

Respuesta

10

sus desencadenantes y definidores necesitan ser definidos en un estilo, en lugar de en el TextBlock directamente:

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 

       <DataTrigger Binding="{Binding Severity}"> 
        <DataTrigger.Value> 
         <sm:Severity>Warning</sm:Severity> 
        </DataTrigger.Value> 
        <Setter TargetName="SeverityText" 
          Property="Foreground" 
          Value="Yellow" /> 
       </DataTrigger> 

      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

Ok, entonces, ¿qué son los desencadenantes fuera de los bloques de estilo? –

+2

@Jonathan No los he usado demasiado, pero creo que los Triggers en un control son directamente para desencadenantes de eventos, como atrapar eventos de mouse, etc. –

3

escribir la ruta completa de la propiedad también funciona:
Así

Propiedad = "Primer plano" -> Propiedad = "TextBlock.Foreground"

Sin embargo, como se sugirió en la anterior a espuesta, se obtiene:

System.InvalidOperationException: activa miembros de la colección deben ser del tipo EventTrigger.


... si no lo pones en un estilo.

Cuestiones relacionadas