我已经找了很久,但似乎无法破解这个难题。
我有一个应用程序,它的主视图是动态变化的,为此,我使用content presenter并绑定到一个控件:
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500">
<ContentPresenter Content="{Binding MainControl}"/>
</StackPanel>
</ScrollViewer>然后,我在运行时更改视图模型中的MainControl。问题是绑定的控件不能可靠地显示它们的错误模板……我怀疑这是因为这里讨论的原因:
Validation ErrorTemplate not showing on data errors
但是这个问题的解决方法似乎对我不起作用,因为我没有在内容呈现器周围使用控件模板。当我用AdornmentDecorator标记包装我的内容呈现器时,似乎没有解决这个问题。如果我在加载到contentpresenter (作为根元素)的每个控件中都放入一个AdornmentDecorator,它确实可以工作,但如果可能的话,我希望避免这种重复。
有什么见解吗?
更新
我尝试了丹尼斯建议的这种方法,但没有用。控件绑定得很好,但它的效果并不比当前的方法好(如下所示)。注意:我尝试了将AdornerDecorator作为单例元素,就像丹尼斯那样,并围绕着ContentPresenter,如下所示。两者都没有显示出任何区别-当MainControl绑定发生变化时,我的控件周围的装饰器都消失了。
<UserControl.Resources>
<Style x:Key="MainContentControl" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<Grid>
<AdornerDecorator>
<ContentPresenter Content="{Binding MainControl}"/>
</AdornerDecorator>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
.....
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500" >
<ContentControl Style="{StaticResource MainContentControl}"/>
</StackPanel>
</ScrollViewer>
<!-- THE BELOW WORKS IF I SURROUND EACH BOUND CONTROL WITH adornerdecorator -->
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500">
<ContentPresenter Content="{Binding MainControl}"/>
</StackPanel>
</ScrollViewer>
-->发布于 2014-03-04 09:34:46
我不会直接使用ContentPresenter,而是使用ContentControl。ContentControl是包含其他元素并具有Content属性的控件的基类,例如Button。
然后,您可以覆盖该模板,使ContentControl旁边有一个AdornerDecorator。这与您以前尝试的不同,因为现在ContentPresenter与Adorner属于相同的可视化树。
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>https://stackoverflow.com/questions/22160809
复制相似问题