WPF ContentPresenter无法绑定Visibility

时间:2016-08-04 19:58:35

标签: c# .net wpf xaml

我在绑定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的红色边框不会更改其可见性。但是两个控件都绑定到同一个属性!

  • 我尝试使用CollapsedHidden - 没有区别
  • 我还尝试将DataContext={Binding}添加到ContentPresenter中 - 没有区别

使用ContentPresenter并将其绑定为可见性有什么问题?

感谢您的回答!

1 个答案:

答案 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,我希望这不会太麻烦。