2013-02-13 74 views
0

我有一個WPF應用程序,它接收來自第三方API的FrameworkElement對象。FrameworkElement對象上的WPF MouseDown事件

我想在這些對象上註冊事件。
這可能嗎?這不工作:

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(); 
    } 
+0

爲什麼這不工作?如果該控件已經是另一個控件的子控件,則不能將其添加到'VideoGrid'中。 – 2013-02-13 10:04:26

+0

在這種情況下,控件是包含WinForm控件的WindowsFormsHost,然後DisplayControl接收它已經打包。該控件顯示正確,但不會觸發事件。 – ilansch 2013-02-13 10:09:40

回答

0

一個可能的原因是控制供應商故意阻斷事件...你可以嘗試在原有的控制與0.01不透明的頂部增加一個控制(比如電網)而虛擬控制我們已經添加是不可見的用戶,我們可以寫上無形控制所有的事件......

更新

這樣的事情...創建不透明0.01網格中添加事件,至並在添加控件之後將網格添加到視頻網格中...所以在t中他的視頻網格將會有控制,並且在控制的頂部將會有網格,因爲它的不透明度而不可見,並且您的事件將在網格上工作...確保給與網格相同的高度和寬度你的控制高度和寬度....

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

你的意思是:Grid grd = new Grid(); grd.Opacity = 0.01; grd.Children.Add(照相機); grd.MouseDown + = new MouseButtonEventHandler(Grid_MouseDown_1); VideoGrid.Children.Add(GRD); 它不起作用 – ilansch 2013-02-13 10:26:19

+0

@ilansch我已更新我的答案 – Bathineni 2013-02-14 09:53:43