在WPF应用程序中,假设有“n”个图像类型的图片,如果点击任何图片(即图片类型),其可见性应该会崩溃。现在,执行此操作的正常方法是为每个图片的每个“Click”事件编写折叠代码。
是否有另一种方法,以便应用程序可以理解,无论何时单击任何类型图像的UIelement(图片),该特定元素(图片)应该崩溃?
我想减少代码,我该如何实现呢?
答案 0 :(得分:3)
您可以利用这些是路由事件的事实,并设置single handler on a parent element。
这允许单个事件处理程序处理子控件的所有事件。事件args的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;
}
答案 1 :(得分:2)
您可以使用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;
}
答案 2 :(得分:1)
您可以在多个事件处理程序上注册您正在使用的方法,并使用Object sender
参数访问特定控件并将其转换为您正在使用的控件类型。
myControl.Click += new EventHandler(myGenericClickMethod);
public void myGenericClickMethod(Object sender, EventArgs e)
{
Image myImage = (Image) sender;
myImage..Visibility = System.Windows.Visibility.Collapsed;
}