gpt4 book ai didi

wpf - 给定样式的 WPF DependencyObject,如何在代码中获取样式键?

转载 作者:行者123 更新时间:2023-12-04 15:16:30 25 4
gpt4 key购买 nike

我有一组绑定(bind)到数据的控件,我想以编程方式将验证器添加到绑定(bind)中。目前,我能够遍历可视化树以找到具有绑定(bind)的控件,并将我的验证器添加到这些控件中。但是为了进一步指定哪些控件应该具有特定的验证,我想使用样式。所以我的 XAML 看起来像这样:

<TextBox Name="someTextBox" Style="{StaticResource optionalNumericTextBox}" />

在这里, optionalNumericTextBox style 既可以添加验证错误模板,也可以作为装饰器来指示此文本框应该应用可选的数字验证器。

当我遍历可视化树,发现带有绑定(bind)的控件,然后需要确定正在使用的样式时,就会出现问题。目前我已经尝试过
dependencyObject.GetValue(FrameworkElement.StyleProperty)

这给了我 a Style对象,但据我所知,这个对象不携带
“可选数字文本框”值。甚至可以确定 key 还是 XAML 阅读器中丢失了此信息?

最佳答案

使用 StaticResourceExtension 时,在将 XAML 转换为 BAML 时,此信息会在编译时丢失。使用 DynamicResourceExtension ,另一方面,保留 key ,以便可以在运行时解析资源。要获取 key ,您需要使用 ReadLocalValue() :

//this gets the Style
var s = textbox.GetValue(TextBox.StyleProperty);
//this gets a ResourceReferenceExpression
var l = textbox.ReadLocalValue(TextBox.StyleProperty);

问题是, ResourceReferenceExpression是内部类型,因此您需要使用反射来提取 key 。

作为所有这些的替代方案,您是否考虑过劫持 Tag而不是属性(property)?
<Style x:Key="optionalNumericTextBox" TargetType="TextBox">
<Setter Property="Tag" Value="optionalNumericTextBox"/>
</Style>

然后您的代码可以简单地检查 Tag TextBox 上的属性(property).

关于wpf - 给定样式的 WPF DependencyObject,如何在代码中获取样式键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660608/

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