<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”项。
这张照片展示了两件事情,蓝色选定的项目是前面网格的最高祖先,黄色突出显示的是内容模板中的文本框。
通过以上两个截图,我们可以看出(基于Contango的回答),这两个项不在同一个视觉树中,这表明我的问题似乎无法实现。然而,我添加的第二个模板(有效的)表明,至少一些修饰元素的视觉信息存储在占位符中。
现在我的问题归结为:a)这些信息是否包括修饰元素的父级?b)如何通过绑定在不同元素上访问这些信息?