2013-08-05 70 views
3

我正面臨着ValuePattern的問題。我有以下的代碼:即使支持,也不能使用ValuePattern

ValuePattern valuePattern = null; 

try 
{ 
     valuePattern = AElement.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; 
     valuePattern.SetValue(EditableElement.value[0].ToString()); 

     Debug.WriteLine(AElement.Current.Name + "'s value changed to {0}.", EditableElement.value[0].ToString()); 
} 
catch (InvalidOperationException) 
{ 
     Debug.WriteLine("Value pattern not supported for " + AElement.Current.Name); 
     return; 
} 

我傳遞一個AutomationElement與controltype.Edit,當我檢查這個元素,我recive這一塊信息:

ControlType.Edit 
    ValuePatternIdentifiers.Pattern 
    LegacyIAccessiblePatternIdentifiers.Pattern 
A first chance exception of type 'System.InvalidOperationException' occurred in  UIAComWrapper.dll 
Value pattern not supported 

沒有人有任何想法爲什麼它說valuepattern不被支持,而ValuePatternIdentifiers.Pattern被列在GetSupportedPatterns()中?

+0

GetSupportedPattern只是對已知模式列表進行循環,並檢查每個模式的TryGetCurrentPattern。 GetCurrentPattern本身就是TryGetCurrentPattern的一個包裝。你確定你在同一時刻調用GetSupportedPatterns和GetCurrentPattern嗎?如果在GetCurrentPattern調用之前添加GetSupportedPatterns調用,該怎麼辦? –

回答

1

在檢查可用的模式與觸發valuePatter.SetValue的時刻之間的時間範圍內,模式可能會消失或不可用。

所以,我建議,在觸發valuePattern.SetValue之前,打印GetAllSupportedPatterns並驗證是否存在值模式。另外,如果您有UIAVerifier的副本,則可以隨時嘗試手動進行更改,並確定是否存在窗口控制或代碼錯誤。

相關問題