I have several GUI control elements of which some are supposed to generate the same action (code-behind function call) on mouse interaction (MouseEnter, MouseLeave).
[edit] I am performing some non style related functionality in my event handlers.
Right now I'm using event attributes in each 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" />
Since many controls in this example are calling the same two functions "GeneralMouseEnter" and "GeneralMouseLeave", I'd like to be able to define a style or something similar to encapsulate that behavior.
[edit - clarification]
This is supposed to become a kind of plugin later on.
(Include code and XAML files to any GUI program and set a style on each interactive control element...)
From what I found on the web, I can use EventTriggers
like in this example:
<Style.Triggers> <EventTrigger RoutedEvent="Click"> <EventTrigger.Actions> <BeginAction TargetName="SomeAction" /> </EventTrigger.Actions> </EventTrigger> </Style.Triggers>
I don't know though if and how to call functions within an action.
Martin,
you can assign an event handler directly from a style using an EventSetter:
<Style TargetType="{x:Type Button}"> <EventSetter Event="Click" Handler="SomeAction"/> </Style>
@ColinE:
I am not sure that using a style to perform event wire-up is a good idea. Styles, by definition, define the visual appearance of controls.
Unfortunately, this seems to be a common and widespread misconception about WPF styles: Although their name suggests they are, like what you say, merely meant to define the visual appearance, they are actually much more: It is helpful to view styles more generally as a shortcut for assigning a set of properties to a control.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With