AutomationElement.GetUpdatedCache(CacheRequest) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
检索一个具有更新缓存的新 AutomationElement。
public:
System::Windows::Automation::AutomationElement ^ GetUpdatedCache(System::Windows::Automation::CacheRequest ^ request);
public System.Windows.Automation.AutomationElement GetUpdatedCache (System.Windows.Automation.CacheRequest request);
member this.GetUpdatedCache : System.Windows.Automation.CacheRequest -> System.Windows.Automation.AutomationElement
Public Function GetUpdatedCache (request As CacheRequest) As AutomationElement
参数
- request
- CacheRequest
将包含在更新的缓存中的模式和属性。
返回
一个具有更新缓存的新的 AutomationElement。
示例
以下示例演示了在组合框中的选择发生更改时如何更新缓存。
CacheRequest comboCacheRequest;
AutomationEventHandler selectHandler;
AutomationElement elementCombo;
AutomationElement selectedItem;
/// <summary>
/// Retrieves a combo box automation element, caches a pattern and a property,
/// and registers the event handler.
/// </summary>
/// <param name="elementAppWindow">The element for the parent window.</param>
private void SetupComboElement(AutomationElement elementAppWindow)
{
// Set up the CacheRequest.
comboCacheRequest = new CacheRequest();
comboCacheRequest.Add(SelectionPattern.Pattern);
comboCacheRequest.Add(SelectionPattern.SelectionProperty);
comboCacheRequest.Add(AutomationElement.NameProperty);
comboCacheRequest.TreeScope = TreeScope.Element | TreeScope.Descendants;
// Activate the CacheRequest and get the element.
using (comboCacheRequest.Activate())
{
// Load the combo box element and cache the specified properties and patterns.
Condition propCondition = new PropertyCondition(
AutomationElement.AutomationIdProperty, "comboBox1", PropertyConditionFlags.IgnoreCase);
elementCombo = elementAppWindow.FindFirst(TreeScope.Descendants, propCondition);
}
// Get the list from the combo box.
Condition propCondition1 = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.List);
AutomationElement listElement = elementCombo.FindFirst(TreeScope.Children, propCondition1);
// Register for ElementSelectedEvent on list items.
if (listElement != null)
{
Automation.AddAutomationEventHandler(SelectionItemPattern.ElementSelectedEvent, listElement,
TreeScope.Children, selectHandler = new AutomationEventHandler(OnListItemSelect));
}
}
/// <summary>
/// Handle ElementSelectedEvent on items in the combo box.
/// </summary>
/// <param name="src">Object that raised the event.</param>
/// <param name="e">Event arguments.</param>
private void OnListItemSelect(object src, AutomationEventArgs e)
{
// Update the cache.
AutomationElement updatedElement = elementCombo.GetUpdatedCache(comboCacheRequest);
// Retrieve the pattern and the selected item from the cache. This code is here only to
// demonstrate that the current selection can now be retrieved from the cache. In an application,
// this would be done only when the information was needed.
SelectionPattern pattern = updatedElement.GetCachedPattern(SelectionPattern.Pattern) as SelectionPattern;
AutomationElement[] selectedItems = pattern.Cached.GetSelection();
selectedItem = selectedItems[0];
}
Private comboCacheRequest As CacheRequest
Private selectHandler As AutomationEventHandler
Private elementCombo As AutomationElement
Private selectedItem As AutomationElement
''' <summary>
''' Retrieves a combo box automation element, caches a pattern and a property,
''' and registers the event handler.
''' </summary>
''' <param name="elementAppWindow">The element for the parent window.</param>
Private Sub SetupComboElement(ByVal elementAppWindow As AutomationElement)
' Set up the CacheRequest.
comboCacheRequest = New CacheRequest()
comboCacheRequest.Add(SelectionPattern.Pattern)
comboCacheRequest.Add(SelectionPattern.SelectionProperty)
comboCacheRequest.Add(AutomationElement.NameProperty)
comboCacheRequest.TreeScope = TreeScope.Element Or TreeScope.Descendants
' Activate the CacheRequest and get the element.
Using comboCacheRequest.Activate()
' Load the combo box element and cache the specified properties and patterns.
Dim propCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "comboBox1", PropertyConditionFlags.IgnoreCase)
elementCombo = elementAppWindow.FindFirst(TreeScope.Descendants, propCondition)
' Get the list from the combo box.
Dim propCondition1 As New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.List)
Dim listElement As AutomationElement = elementCombo.FindFirst(TreeScope.Children, propCondition1)
' Register for ElementSelectedEvent on list items.
selectHandler = New AutomationEventHandler(AddressOf OnListItemSelect)
If (listElement IsNot Nothing) Then
Automation.AddAutomationEventHandler(SelectionItemPattern.ElementSelectedEvent, listElement, _
TreeScope.Children, selectHandler)
End If
End Using
End Sub
''' <summary>
''' Handle ElementSelectedEvent on items in the combo box.
''' </summary>
''' <param name="src">Object that raised the event.</param>
''' <param name="e">Event arguments.</param>
Private Sub OnListItemSelect(ByVal src As Object, ByVal e As AutomationEventArgs)
' Update the cache.
Dim updatedElement As AutomationElement = elementCombo.GetUpdatedCache(comboCacheRequest)
' Retrieve the pattern and the selected item from the cache. This code is here only to
' demonstrate that the current selection can now be retrieved from the cache. In an application,
' this would be done only when the information was needed.
Dim pattern As SelectionPattern = _
DirectCast(updatedElement.GetCachedPattern(SelectionPattern.Pattern), SelectionPattern)
Dim selectedItems As AutomationElement() = pattern.Cached.GetSelection()
selectedItem = selectedItems(0)
End Sub
注解
原始 AutomationElement 值保持不变。 GetUpdatedCache返回一个新的 AutomationElement,它引用同一用户界面 (UI) ,并且具有相同。RuntimeIdProperty