2017-06-15 94 views
0

我正在通過它的VisualTree使用VisualTreeHelper來返回DependencyObjects遍歷WPF應用程序。但是,一旦我找到我正在尋找的對象(在這種情況下它是一個按鈕),我需要「按下」/調用它。我已經成功地調用了一個按鈕InvokePatternAutomationElement如何將DependencyObject轉換爲AutomationElement?

private void ClickBtn(AutomationElement btnElement) { 
    InvokePattern btnPattern = btnElement.GetCurrentPattern(
     InvokePattern.Pattern) as InvokePattern; 
    btnPattern.Invoke(); 
} 

所以問題是:我如何將一個DependencyObjects轉換爲AutomationElement?
或者:我如何調用一個DependancyObject?
或者:我如何創建一個指向與給定的DependencyObjects劑量相同的WPF元素的AutomationElement?

EDIT1:
我發現我可以在DependancyObject轉換成控制。

var childVisual = VisualTreeHelper.GetChild(rootObject, i); 
var childInstance = childVisual as Control; 

但問題是:我如何調用控件?
或者:我如何將控件轉換爲AutomationElement?

回答

0

原來我可以投的AutomationElement到ButtonBase並通過反射調用它「的OnLoad」的方法:

var childVisual = VisualTreeHelper.GetChild(rootObject, i); 
var btnToInvoke = childVisual as ButtonBase; 
MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", 
    BindingFlags.NonPublic | BindingFlags.Instance); 
clickMethodInfo.Invoke(btnToInvoke, new object[] {}); 
相關問題