c# - 如何为相同类型的 UIElement 编写通用事件处理程序?

标签 c# wpf xaml wpf-controls uielement

在 WPF 应用程序中,假设有“n”张图像类型的图片,如果单击任何图片(即图像类型),它的可见性应该崩溃。现在执行此操作的正常方法是编写代码以折叠每张图片的每个“点击”事件。
是否有另一种方法让应用程序可以理解,只要单击任何图像类型的 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;
}

关于c# - 如何为相同类型的 UIElement 编写通用事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18024971/

相关文章:

c# - WPF : Dynamically create a grid with specified x rows and y columns with static image in each cell

c# - WPF:将具有不同类型项目的多个级别添加到 TreeView

wpf - Rx-WPF 和 Rx-Xaml 包之间有什么区别吗?

c# - 使用 MVVM 模式实现异步 "loadData"方法的最佳方式

c# - 从主程序调用选择方法并填充列表框

c# - MultiBinding 转换返回函数

c# - IIS7 - 当请求参数的大小超过 30mb 时,Webrequest 失败并返回 404.13

c# - 可以在 C# 中训练 sapi 吗?

c# - Windows 窗体工具提示在首次使用后不会重新出现

c# - 如何更新/刷新 GMap 中的叠加层?