我已经搜索了很多,似乎无法破解这个坚果。
我有一个主视图动态变化的应用程序,为此我使用内容演示器与控件绑定:
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500">
<ContentPresenter Content="{Binding MainControl}"/>
</StackPanel>
</ScrollViewer>
然后我在运行时在我的视图模型中更改 MainControl。问题是被绑定的控件不能可靠地显示它们的错误模板......我怀疑这是由于这里讨论的原因:
但是这个问题的修复似乎对我不起作用,因为我没有在我的内容演示者周围使用控制模板。当我将 AdornmentDecorator 标签包裹在我的内容演示者周围时,它似乎并没有解决问题。如果我在加载到 contentpresenter(作为根元素)的每个控件中放置一个 AdornmentDecorator,它确实有效,但如果可能的话,我想避免这种重复。
有什么见解吗?
更新
我尝试了丹尼斯建议的这种方法,但无济于事。控件绑定没问题,但它的效果并不比当前方法好(也显示在下面的注释中)。注意:我尝试使用 AdornerDecorator 作为单例元素,就像 Dennis 一样,并围绕 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>
-->