我在绑定ContentPresenter的可见性时遇到问题。我创建了一个最小的示例窗口:
在我的资源中,我定义了以下DataTemplate
<DataTemplate x:Key="MyTemplate">
<Border Width="50" Height="50" Background="Red"/>
</DataTemplate>
窗口只包含红色和绿色边框的StackPanel。
<StackPanel>
<ContentPresenter ContentTemplate="{StaticResource MyTemplate}" Visibility="{Binding Vis}"/>
<Border Width="50" Height="50" Background="Green" Visibility="{Binding Vis}"/>
</StackPanel>
可见性在DataContext中可用:
private Visibility _Vis;
public Visibility Vis
{
get
{
return _Vis;
}
set
{
_Vis = value;
OnPropertyChanged(nameof(Vis));
}
}
显示窗口,两个边框相互显示。现在问题:如果我更改了可见性(使用的是OnPropertyChanged),则只有绿色边框会更改“可见性”。使用ContentTemplate的红色边框不会更改其可见性。但是两个控件都绑定到同一个属性!
Collapsed
和Hidden
- 没有区别DataContext={Binding}
添加到ContentPresenter中 -
没有区别使用ContentPresenter并将其绑定为可见性有什么问题?
感谢您的回答!
答案 0 :(得分:1)
我能够重现您所看到的内容,并且我可以通过将ContentPresenter
更改为ContentControl
来修复它:
<StackPanel>
<ContentControl
ContentTemplate="{StaticResource MyTemplate}"
Visibility="{Binding Vis}"
/>
<Border
Width="50"
Height="50"
Background="Green"
Visibility="{Binding Vis}"
/>
</StackPanel>
ContentPresenter
有点搞笑。其他人遇到了和你一样的问题。通常,如果我在该事物上设置任何属性,我会改为ContentControl
。我假设您现在必须明确地Content
绑定ContentControl
,我希望这不会太麻烦。