【问题标题】:WPF MouseDown event on FrameworkElement objectFrameworkElement 对象上的 WPF MouseDown 事件
【发布时间】:2013-02-13 09:58:50
【问题描述】:

我有一个 WPF 应用程序,它从 3rd 方 API 接收 FrameworkElement 对象。

我想在这些对象上注册事件。
这可能吗?这不起作用:

    public void DisplayControl(FrameworkElement control)
    {
        control.MouseEnter += new MouseEventHandler(Control_MouseEnter);
        control.MouseDown += new MouseButtonEventHandler(Control_MouseDownFromElement);
        VideoGrid.Children.Add(control);
    }

    void Control_MouseDownFromElement(object sender, EventArgs e)
    {
        lblOutput.Content = string.Format("Sender is: " + sender.ToString());
    }
    void Control_MouseEnter(object sender, EventArgs e)
    {
        (sender as FrameworkElement).Focus(); 
    }

【问题讨论】:

  • 为什么这不起作用?如果控件已经是另一个控件的子控件,则不能将其添加到VideoGrid
  • 在这种特定情况下,控件是包含 WinForm 控件的 WindowsFormsHost,然后 DisplayControl 接收它已经包装。控件正确显示但不触发事件。

标签: wpf events mouseevent frameworkelement


【解决方案1】:

一个可能的原因是控件提供者故意阻止该事件...您可以尝试在原始控件的顶部添加一个不透明度为 0.01 的控件(例如网格),这意味着我们添加的控件实际上对用户,我们可以在隐形控件上编写所有事件...

更新

像这样...创建一个不透明度为 0.01 的网格,将事件添加到该网格,并在添加控件后将网格添加到视频网格...所以在视频网格中将有控件,并且在顶部控件将有一个不可见的网格,因为它的不透明性并且您的事件将在网格上工作...确保为网格提供与您的控件高度和宽度匹配的相同高度和宽度....

Grid grd = new Grid(); 
grd.Opacity = 0.01; 
grd.MouseDown += new MouseButtonEventHandler(Grid_MouseDown_1);
VideoGrid.Children.Add(control);
VideoGrid.Children.Add(grd)

【讨论】:

  • 你的意思是:Grid grd = new Grid(); grd.不透明度 = 0.01; grd.Children.Add(相机); grd.MouseDown += new MouseButtonEventHandler(Grid_MouseDown_1); VideoGrid.Children.Add(grd);它不起作用
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
相关资源
最近更新 更多