Joe*_*Joe 4 wpf grid visibility converter contentpresenter
我有一个以下网格:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
...
<ContentPresenter Grid.Row="1" Content="{Binding Path=PredictiveWorkspace}"
Visibility="{Binding Path=ShowPredictiveWorkspace,
Converter={StaticResource boolToVisibility}}"/>
<ContentPresenter Grid.Row="1" Content="{Binding Path=M2Workspace}"
Visibility="{Binding Path=ShowStandardWorkspace,
Converter={StaticResource boolToVisibility}}"/>
...
</Grid>
Run Code Online (Sandbox Code Playgroud)
这两个ContentPresenters具有相同的Grid.Row定义,因为它们中只有一个应该同时可见.我有以下boolToVisibility转换器:
[ValueConversion(typeof(bool), typeof(System.Windows.Visibility))]
public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)value)
{
return System.Windows.Visibility.Visible;
}
else
return System.Windows.Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
而且问题在于:两者ContentPresenters都是可见的!我还注意到ShowPredictiveWorkspace应用程序只读取了属性.ShowStandardWorkspace永远不会调用在getter上设置的断点.我想这是一个愚蠢的错误,但我真的找不到它.
编辑:
public bool ShowStandardWorkspace
{
get { return this._showStandardWorkspace; }
set
{
this._showStandardWorkspace = value;
this.OnPropertyChanged(() => this.ShowStandardWorkspace);
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为它无法将可见性与ContentPresenter元素上的转换器绑定.
如果更改ContentPresenter为a ContentControl,则可以将visibility属性与转换器绑定,然后您不必将其嵌套在另一个元素中.
这显然是因为它ContentPresenter是一种轻量级元素,意味着在一个中使用ControlTemplate.
来自MSDN(我突出显示):
您通常使用ContentControl的ControlTemplate中的ContentPresenter来指定要添加内容的位置.每个ContentControl类型在其默认ControlTemplate中都有一个ContentPresenter.
当ContentPresenter对象位于ContentControl的ControlTemplate中时,Content,ContentTemplate和ContentTemplateSelector属性将从ContentControl的相同名称的属性中获取其值.您可以通过设置ContentSource属性或绑定它们,使ContentPresenter属性从模板化父级的其他属性中获取这些属性的值.
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |