gpt4 book ai didi

c# - 如何隐藏 WPF 元素以与自动化框架一起正常工作?

转载 作者:行者123 更新时间:2023-12-05 07:25:53 24 4
gpt4 key购买 nike

隐藏 WPF 控件的最常见方法是将 Visibility 属性设置为 HiddenCollapsed。当我为示例应用程序执行此操作时,我试图通过自动化框架找到这些元素,我得到了 IsOffscreen 标志设置为 true 的项目。

例如:

<Label Content="Hidden label" Visibility="Hidden"/>

Visibility: Hidden

<Label Content="Collapsed label" Visibility="Collapsed"/>

Visibility: Collapsed

从我的角度来看,它看起来合理但自动化框架文档: https://learn.microsoft.com/en-us/windows/desktop/winauto/uiauto-automation-element-propids 说:

Objects that the end-user does not perceive at all, or that are "programmatically hidden" (for example, a dialogue box that has been dismissed, but the underlying object is still cached by the application) should not be in the automation element tree in the first place (instead of setting the state of IsOffscreen to TRUE).

如何实现文档中指出的结果?

最佳答案

面对类似的问题,将可见性设置为隐藏/折叠不会从可视化树中删除元素,即使控件在视觉上不可见。目前据我所知,没有其他属性可以从可视化树中删除元素。

作为解决方法,您可以使用 ContentPresenter 使用触发器在运行时包含或排除控件。

例如,在下面的代码片段中,我根据条件决定要包含哪个标签。它在运行时决定,并且只有一个包含在可视化树中。

<ContentPresenter Content="{Binding}">
<ContentPresenter.Resources>
<DataTemplate x:Key="LabelContent1">
<Label Content="Dummy" />
</DataTemplate>
<DataTemplate x:Key="LabelContent2">
<Label Content="Dummy" />
</DataTemplate>
</ContentPresenter.Resources>
<ContentPresenter.Style>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="ContentTemplate" Value="{StaticResource LabelContent1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Converter={Binding Path=LabelText}}" Value="{x:Null}">
<Setter Property="ContentTemplate" Value="{StaticResource LabelContent2}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>

引用: https://tyrrrz.me/blog/conditional-content-presenting-via-wpf-contentpresenter

关于c# - 如何隐藏 WPF 元素以与自动化框架一起正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54678721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com