2011-08-06 15 views
7

Aquí está mi bloque de texto.WPF: Chainging property de otro control en el control Trigger

<Image x:Name:imgAnother/> 

    <TextBlock> 
     this is my text block 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Setter Property="TextDecorations" Value="None"/> 
       <Style.Triggers> 
        <Trigger Property="TextBlock.IsMouseOver" Value="True"> 
         <Setter Property="Foreground" Value="RoyalBlue"/> 
         <!--I like to insert a code at here that changes another control's property...--> 
        </Trigger> 
        <Trigger Property="TextBlock.IsMouseOver" Value="False"> 
         <Setter Property="Foreground" Value="#FF808080"/> 
         <!--..and this line too.--> 
        </Trigger> 
       </Style.Triggers>      
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 

me gusta hacer un código XAML que puede cambiar proerpty de otro control, como "imgAnother".

¿cómo puedo hacer eso?

+0

¿Dónde está esa imagen (o control que quieres decir)? –

+0

Básicamente, quiero cambiar la propiedad de otro control en la misma ventana. Pero también, el control puede ubicar en el recurso de la aplicación, el recurso de la ventana, el recurso del control, también. – mjk6026

Respuesta

12

Debe agregar el origen y el destino de alguna manera.

Puede crear un control personalizado que contenga tanto el hipervínculo/bloque de texto como la imagen. Esa es la forma preferida si tiene varios bloques que se comportan en dicho ejemplo.

Si no te gusta esto. Es posible crear un control anónimo "temporal" de la siguiente manera:

<ControlTemplate x:Key="myCtl" TargetType="ContentControl"> 
    <StackPanel> 
    <Image x:Name="img"/> 
    <ContentPresenter x:Name="ctr" /> 
    </StackPanel> 

    <ControlTemplate.Triggers> 
        <Trigger SourceName="ctr" Property="IsMouseOver" Value="True"> 
         <Setter TargetName="ctr" Property="Foreground" Value="RoyalBlue"/> 
         <!--I like to insert a code at here that changes another control's property...--> 
        </Trigger> 
        <Trigger SourceName="ctr" Property="IsMouseOver" Value="False"> 
         <Setter TargetName="ctr" Property="Foreground" Value="#FF808080"/> 
         <!--..and this line too.--> 
        </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

el XAML anterior residirá en los recursos de tu ventana.

NOTA: es muy parecido a una pista a seguir, que un fragmento completamente funcional.

En el cuerpo, se puede hacer referencia al control de tal manera:

<ContentControl Template="{StaticResource myCtl}" Content="this is my text block" /> 

espero que ayude.