【发布时间】:2011-05-26 12:03:53
【问题描述】:
我有几个 GUI 控制元素,其中一些应该在鼠标交互(MouseEnter、MouseLeave)时生成相同的操作(代码隐藏函数调用)。
[编辑] 我正在我的事件处理程序中执行一些与样式无关的功能。
现在我在每个控件中使用事件属性:
<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" />
由于此示例中的许多控件都调用相同的两个函数“GeneralMouseEnter”和“GeneralMouseLeave”,我希望能够定义一种样式或类似的东西来封装该行为。
[编辑-澄清]
这应该会在以后成为一种插件。
(在任何 GUI 程序中包含代码和 XAML 文件,并在每个交互式控件元素上设置样式...)
根据我在网上找到的信息,我可以使用EventTriggers,就像在这个例子中一样:
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginAction TargetName="SomeAction" />
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
我不知道是否以及如何在动作中调用函数。
- 是否可以通过创建一个带有动作+触发器的样式来获得此功能,以应用于每个控件?该怎么做?
- 如何将多个样式(用于多个交互事件)分配给一个控件?
- 是否有更清洁的方法来实现这种行为?
- [编辑]
如果我想在我的 GUI 中的所有滑块上进行鼠标交互怎么办?
【问题讨论】:
标签: c# wpf events styles code-behind