2010-03-05 8 views
61

¿Cómo se establece el evento/desencadenador MouseOver para el borde en XAML? Quiero que el borde se ponga verde cuando el mouse está sobre él y luego volver a azul cuando el mouse ya no está sobre el borde. ¿Por qué no puedo simplemente usar el siguiente código:¿Cómo se establece el evento/desencadenador MouseOver para el borde en XAML?

<Border 
    Name="ClearButtonBorder" 
    Grid.Column="1" 
    CornerRadius="0,3,3,0" 
    Background="Blue"> 
    <Border.Triggers> 
     <Trigger Property="Border.IsMouseOver" Value="True"> 
      <Setter Property="Border.Background" Value="Green" /> 
     </Trigger> 
     <Trigger Property="Border.IsMouseOver" Value="False"> 
      <Setter Property="Border.Background" Value="Blue" /> 
     </Trigger> 
    </Border.Triggers> 
    <TextBlock 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Text="X" /> 
</Border> 

Realmente no entiendo estos disparadores y estilos en WPF. Es un lastre no ser capaz de lograr algo tan simple como esto ... Por favor, proporcione la solución para mí y ayúdame a entender qué diablos está mal con mi código. Gracias un montón.

Respuesta

119

Sí, esto es confuso ...

Según this blog post, parece que se trata de una omisión en WPF.

Para que funcione es necesario utilizar un estilo:

<Border Name="ClearButtonBorder" Grid.Column="1" CornerRadius="0,3,3,0"> 
     <Border.Style> 
      <Style> 
       <Setter Property="Border.Background" Value="Blue"/> 
       <Style.Triggers> 
        <Trigger Property="Border.IsMouseOver" Value="True"> 
         <Setter Property="Border.Background" Value="Green" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Style> 
     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" /> 
    </Border> 

supongo que este problema no es tan común como la mayoría de la gente tiende a factorizar este tipo de cosas en un estilo, para que pueda ser utilizado en múltiples controles.

+2

Gracias por su respuesta. Ahora sé cómo se hace. Aún así, la razón por la que tiene que implementarse así sigue siendo ilógica para mí. Pero está bien, supongo. :) – Boris

+0

Sí, estoy de acuerdo que es iloigcal. Como digo, parece ser un error/omisión de WPF. – Grokys

+5

No estoy de acuerdo con que sea un error o una omisión. En WPF hay un conjunto de reglas explícito que define la prioridad del valor de la propiedad. http://msdn.microsoft.com/en-us/library/ms743230.aspx –

Cuestiones relacionadas