在WPF应用程序中,假设有'n'个图片类型的图片,并且如果点击任何图片(即图片类型),其可见性应该会崩溃。现在一个正常的方法是编写代码来为每个图片的每个“Click”事件折叠。
是否有另一种方式,以便应用程序可以理解,只要单击图像类型的任何UI元素(图片),然后该特定元素(图片)应该折叠?
我想减少代码,我该如何实现这一目标?如何为同一类型的UIElement编写通用事件处理程序?
回答
你可以利用这些路由事件的事实,并设置一个single handler on a parent element。
这允许单个事件处理程序来处理子控件的所有事件。事件参数的OriginalSource
属性将提供单击的UIElement,例如,如果您订阅了UIElement.MouseLeftButtonDown
或类似的“共享”事件。
你会加入,在你的XAML,要将容器做到这一点:
<Grid UIElement.MouseLeftButtonDown="CommonClickHandler">
<!-- Your elements here -->
然后,在后面的代码:
private void CommonClickHandler(object sender, MouseButtonEventArgs e)
{
Image picture = e.OriginalSource as Image; //OriginalSource is the original element
if (picture != null)
picture.Visibility = Visibility.Collapsed;
}
您可以在多个事件处理程序中注册您正在使用的方法,并通过使用Object sender
参数并将其转换为您正在使用的控件类型来访问特定控件。
myControl.Click += new EventHandler(myGenericClickMethod);
public void myGenericClickMethod(Object sender, EventArgs e)
{
Image myImage = (Image) sender;
myImage..Visibility = System.Windows.Visibility.Collapsed;
}
你能不能请ela用一个例子硼酸盐?更新了 –
以显示示例。 –
您可以添加使用EventManager.RegisterClassHandler全球处理器像这样 -
public MainWindow()
{
InitializeComponent();
EventManager.RegisterClassHandler(typeof(Image), Image.MouseDownEvent,
new RoutedEventHandler(OnMouseDown));
}
private void OnMouseDown(object sender, RoutedEventArgs e)
{
(sender as Image).Visibility = System.Windows.Visibility.Collapsed;
}
这完美的作品!我有一个问题,但如果我想让一张照片和其他照片的功能不同,我该怎么办? –
你的处理程序中有'sender'。您可以检查图像名称或其他一些属性,并为需要专门处理的图像进行工作。 –
- 1. 如何为多个类似的控件编写事件处理程序?
- 2. 如何在C#中编写事件和事件处理程序?
- 3. GWT - 如何处理同一事件的多个处理程序
- 4. 如何为处理程序编写teamplate
- 5. 如何同步事件处理程序
- 6. 如何编写动态控制的事件处理程序?
- 7. Visual C++如何重写parant类的事件处理程序?
- 8. 编写一个通用类来处理内置类型
- 9. 如何在VB.NET中编写事件处理程序?
- 10. 如何编写内联事件处理程序?
- 11. Bitrix24如何编写自定义事件处理程序
- 12. 事件处理程序与不同类型的发送者
- 13. 如何在事件重写jQuery的事件处理程序
- 14. 如何为F#应用程序编写退出处理程序?
- 15. 如何编写通用函数来处理不同类型的流?
- 16. 编写事件处理程序时遇到了一些困惑
- 17. 如何为不同的类编写通用的泛型函数?
- 18. 创建的事件处理程序处理多个事件类型
- 19. ZK通用树事件处理程序
- 20. PropertyChangedEventHandler类型的事件处理程序如何订阅PropertyChanged事件?
- 21. 如何访问另一个类中的事件处理程序
- 22. 如何编写和使用Monolog处理程序和通道
- 23. 如何在Go中编写通用处理程序?
- 24. 使用强类型的事件处理程序的仿制药?
- 25. 如何在JavaScript中编程调用mouseover事件处理程序
- 26. 为所有事件类型附加处理程序
- 27. 编程连接事件处理程序
- 28. 事件处理程序的同步
- 29. 从事件处理程序写入WriteStream
- 30. 改写Button_click事件处理程序
我仍然对C#感兴趣,请给出一个简短的代码示例吗? –
@ Sidsec9添加了代码示例 –
此解决方案的工作方式与我想要的最接近!为什么选择RoutesEventArgs上的MouseButtonEventArgs?它有什么好处? –