Wpf 确保在ContentPresenter中使用AdormentDecorator,但不使用ControlTemplate
我到处找了好几遍,似乎都没办法把这个坚果弄碎 我有一个主视图可以动态更改的应用程序,为此,我使用content presenter与控件绑定:Wpf 确保在ContentPresenter中使用AdormentDecorator,但不使用ControlTemplate,wpf,contentpresenter,errortemplate,Wpf,Contentpresenter,Errortemplate,我到处找了好几遍,似乎都没办法把这个坚果弄碎 我有一个主视图可以动态更改的应用程序,为此,我使用content presenter与控件绑定: <ScrollViewer Grid.Column="2" x:Name="StepScrollViewer"> <StackPanel Margin="20,20,20,500"> <ContentPresenter Content="{Binding MainControl
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500">
<ContentPresenter Content="{Binding MainControl}"/>
</StackPanel>
</ScrollViewer>
然后,在运行时在视图模型中更改MainControl。问题是绑定控件不能可靠地显示其错误模板。。。我怀疑这是因为这里讨论的原因:
但是这个问题的解决方案似乎对我不起作用,因为我没有在我的内容演示者周围使用控制模板。当我在我的内容演示者周围包装一个AdormentDecorator标记时,它似乎并没有解决问题。如果我在加载到contentpresenter(作为根元素)的每个控件中放置一个AdormentDecorator,它确实可以工作,但是如果可能的话,我希望避免这种重复
有什么见解吗
更新
我尝试了丹尼斯建议的这种方法,但没有用。控件绑定正常,但它的工作方式并不比当前方法好(如下所示)。注意:我以Dennis的方式将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>
-->
.....
-->
我不会直接使用ContentPresenter
,而是使用ContentControl
。ContentControl
是包含其他元素且具有Content
属性的控件的基类,例如按钮
然后您可以覆盖模板,在ContentControl
旁边有一个AdornerDecorator
。这与您以前尝试的不同,因为现在的ContentPresenter
与装饰器属于同一视觉树
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
编辑:忘记了装饰解码器
需要包装容器,而不是并排坐着 如果这不起作用;让我知道,我会进一步帮助你。我已经有一段时间没有用WPF做任何事情了。我想我需要另一块与此配套的XAML。。。我可以把这种风格放在我的资源中(我讨厌WPF把这样一个功能明确的东西称为“风格”,但这是离题的),但是我如何将这种风格“应用”到滚动面板或。。。那么,我会把它应用于什么呢?那么,我该如何将其动态绑定到控件MVVM样式呢?好吧,从技术上讲,上面的工作方式并不是我想要的。我仍然需要在加载到content presenter中的每个用户控件的主体周围放置一个AdornerDecorator元素。现在,我想这就是我要做的。