¿Cómo configurar una función de evento a través de un estilo?


Tengo varios elementos de control GUI de los cuales se supone que algunos generan la misma acción (llamada a la función detrás del código) en la interacción del ratón (MouseEnter, MouseLeave).
[edit] Estoy realizando algunas funciones no relacionadas con el estilo en mis controladores de eventos.
Ahora mismo estoy usando atributos de evento en cada control:

<Button Name="Button" Content="Button 1" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    PreviewMouseDown="Button1_PreviewMouseDown" PreviewMouseUp="Button1_PreviewMouseUp" />
<Button Name="NotInteractingButton" Content="Button 2" 
    /><!-- this button has no MouseOver-effects -->
<ToggleButton Content="ToggleButton" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave"  />
<!-- needs to use IsMouseDirectlyOver on the slider knob... -->
<Slider Name="HorizontalSlider" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    ValueChanged="Slider_ValueChanged" />
<Slider Name="VerticalSlider" Orientation="Vertical" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    ValueChanged="Slider_ValueChanged" />

Dado que muchos controles en este ejemplo están llamando a las mismas dos funciones" GeneralMouseEnter " y "GeneralMouseLeave", me gustaría poder definir un estilo o algo similar para encapsular ese comportamiento.

[editar-aclaración]
Esto se supone que se convertirá en una especie de plugin más adelante.
(Incluir código y archivos XAML a cualquier programa GUI y establecer un estilo en cada elemento de control interactivo...)

De lo que encontré en la web, puedo usar EventTriggers como en este ejemplo:

<Style.Triggers>
  <EventTrigger RoutedEvent="Click">
    <EventTrigger.Actions>
      <BeginAction TargetName="SomeAction" />
    </EventTrigger.Actions>
  </EventTrigger>
</Style.Triggers>

Aunque no se si y como llamar funciones dentro de una acción.

  • ¿Es posible obtener esta funcionalidad por ¿crear un estilo con acción + disparador para aplicar a cada control? ¿Cómo hacer eso?
  • ¿Cómo puedo asignar múltiples estilos (para múltiples eventos de interacción) a un control?
  • ¿Existe tal vez una manera más limpia de lograr este comportamiento?
  • [22] [editar]]
    ¿Qué pasa si quiero, digamos, tener la interacción del ratón en todos los controles deslizantes en mi GUI?
Author: Dave Clemmer, 2010-12-16

1 answers

Martin,

Puede asignar un controlador de eventos directamente desde un estilo usando un EventSetter:

<Style TargetType="{x:Type Button}">
  <EventSetter Event="Click" Handler="SomeAction"/>
</Style>

@ ColinE:

No estoy seguro de que usar un estilo para realizar un evento de cableado sea una buena idea. Los estilos, por definición, definen la apariencia visual de los controles.

Desafortunadamente, esto parece ser un error común y generalizado sobre los estilos WPF: Aunque su nombre sugiere que son, como dices, simplemente para definir la apariencia visual, en realidad son mucho más: es útil ver los estilos de manera más general como un acceso directo para asignar un conjunto de propiedades a un control.

 73
Author: gstercken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-17 10:27:40