gpt4 book ai didi

c# - 是否可以绑定(bind)到装饰元素容器上的属性?

转载 作者:太空狗 更新时间:2023-10-29 23:38:17 25 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我们使用装饰器来显示验证消息,在特定情况下,有一个单行网格具有多个控件,其中一些控件具有验证功能。我遇到的问题是我想强制错误消息控件的宽度与网格相同,但似乎无法找到从装饰器模板引用该网格的方法。这是我尝试过的示例:

<ControlTemplate x:Key="Local_TopAdornedTemplateWide">
<StackPanel>
<AdornedElementPlaceholder x:Name="adornedElement"/>
<TextBlock MaxWidth="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid}, ElementName=adornedElement}"
TextWrapping="Wrap"
Text="{Binding Converter={StaticResource Local_ValidationErrorMessageConverter}}"
Style="{DynamicResource Error_Text}"
Padding="2 1 0 0"
Visibility="{Binding ElementName=adornedElement, Mode=OneWay, Path=AdornedElement.IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}"
/>
</StackPanel>
</ControlTemplate>

这会导致应用程序崩溃并出现 XamlParseException。

理想情况下,解决方案不会特定于网格,因此它可以获得任何容器类型的宽度,但目前网格是唯一的用例。

编辑:这是我们在应用程序中使用的另一个模板的示例;该模板不适用于我的情况,因为它将错误限制为上述网格的单个列的宽度:

 <ControlTemplate x:Key="Local_TopAdornedErrorTemplate">
<StackPanel>
<AdornedElementPlaceholder x:Name="adornedElement"/>
<TextBlock MaxWidth="{Binding ElementName=adornedElement, Path=ActualWidth}"
TextWrapping="Wrap"
Text="{Binding Converter={StaticResource Local_ValidationErrorMessageConverter}}"
Style="{DynamicResource Error_Text}"
Padding="2 1 0 0"
Visibility="{Binding ElementName=adornedElement, Mode=OneWay, Path=AdornedElement.IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}"
/>
</StackPanel>
</ControlTemplate>

我使用 snoop 捕获了以下两个屏幕截图(我无法截取完整堆栈中的一个以防止发布任何专有内容)

这张照片显示了我之前提到的网格,其中是正在装饰的 FinancialTextBox 项目

Adorned item

这张照片显示了两件事,蓝色选中的项目是上一张照片中网格的最高祖先,黄色突出显示的是内容模板中的文本框

Adorner

对于这两个,似乎很明显(根据 Contango 的回答中的信息)这两个项目不在同一个视觉树中,这会让我相信我的问题是不可能的。然而,我添加的第二个模板(它确实有效)指出,至少来自装饰元素的一些视觉信息存在于占位符中。

所以现在我的问题归结为 a) 此信息是否包括装饰元素的父元素以及 b) 如何通过绑定(bind)到不同元素来访问它?

最佳答案

这最终比我试图走的路要简单得多。

我在阅读 AdornedElementPlaceholder 类时遇到了 this entry on MSDN并注意到该类实际上有一个名为 parent 的属性,我尝试了以下绑定(bind)并且它完美地工作:

MaxWidth="{Binding ElementName=adornedElement, 
Mode=OneWay,
Path=AdornedElement.Parent.ActualWidth}"

关于c# - 是否可以绑定(bind)到装饰元素容器上的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444837/

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