2016-08-04 82 views
-1

我無法綁定ContentPresenter的可見性。我創建了一個小例子窗口:WPF 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和綁定it's的問題能見度?

謝謝你的回答!

+0

ContentPresenter有時候很特別 - 你可以用ContentControl替換它嗎(如果需要,可以顯式綁定內容)並查看它是否更好? –

回答

1

我能夠重現您所看到的,我能夠通過改變ContentPresenterContentControl來解決它:

<StackPanel> 
    <ContentControl 
     ContentTemplate="{StaticResource MyTemplate}" 
     Visibility="{Binding Vis}" 
     /> 
    <Border 
     Width="50" 
     Height="50" 
     Background="Green" 
     Visibility="{Binding Vis}" 
     /> 
</StackPanel> 

ContentPresenter是有點好笑。其他人和你有同樣的問題。作爲一項規則,如果我正在設置任何屬性,我改爲ContentControl。我想你必須明確地綁定Content現在在ContentControl,我希望不會太麻煩。