Mar*_*ngs 34 c# wpf events styles code-behind
我有几个GUI控件元素,其中一些应该在鼠标交互(MouseEnter,MouseLeave)上生成相同的操作(代码隐藏函数调用).
[edit] 我在我的事件处理程序中执行一些非样式相关的功能.
现在我在每个控件中使用事件属性:
<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" />
Run Code Online (Sandbox Code Playgroud)
由于此示例中的许多控件都调用相同的两个函数"GeneralMouseEnter"和"GeneralMouseLeave",因此我希望能够定义一个样式或类似的东西来封装该行为.
[编辑 - 澄清]
这应该成为后来的一种插件.
(将代码和XAML文件包含到任何GUI程序中,并在每个交互式控件元素上设置样式...)
根据我在网络上发现的内容,我可以EventTriggers在此示例中使用:
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginAction TargetName="SomeAction" />
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
Run Code Online (Sandbox Code Playgroud)
我不知道是否以及如何在一个动作中调用函数.
gst*_*ken 83
马丁,
您可以使用EventSetter直接从样式分配事件处理程序:
<Style TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="SomeAction"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
@ColinE:
我不确定使用样式来执行事件连接是一个好主意.根据定义,样式定义控件的视觉外观.
不幸的是,这似乎是对WPF风格的一种普遍和普遍的误解:虽然他们的名字暗示它们就像你说的那样,仅仅意味着定义视觉外观,但它们实际上更多:它更有利于将样式视为用于为控件分配一组属性的快捷方式.