UWP – 防止NavigationViewItemHeader被剪裁

我正在编写一个UWP应用程序,其中包含一个包含NavigationViewItemHeader

               

(等等)

但是,当我折叠视图时,标题会被剪切:

我该怎么做才能防止这种情况发生?

解决方案1

增加项目标题的左边距:

  ...  

在此处输入图像描述

解决方案2

通过将CompactModeThresholdWidthExpandedModeThresholdWidth设置为某个大数字来禁用NavigationView的紧凑和扩展显示模式:

  

在此处输入图像描述

解决方案3

IsPaneOpen建议的那样,将项目标题的Visibility属性绑定到NavigationViewIsPaneOpen属性,只使用x:Bind而不是Binding因为它不需要转换器:

  ...  ...  ...  

在此处输入图像描述

定义NavigationView对象的名称属性x:Name ,以便可以访问其IsPaneOpen属性。 使用Binding属性ElementName ,获取要用作绑定Source的元素,以及使用该属性定义的唯一标识符。

名称建议的IsPaneOpen属性标识窗格是否打开到它的全宽,可用于切换NavigationViewItemHeader.Visibility属性的可见性!

    

由于IsPaneOpen属性返回一个Boolean值,而Visibility的类型为Enum ,您需要创建一个转换器 ,因此可以将布尔状态分配给一个对Visibility属性有意义的值。 对于我们的情况,我们希望:

NavigationView.IsPaneOpen = True – > NavigationViewItemHeader.Visibility = Visibility.Visible ;

NavigationView.IsPaneOpen = False – > NavigationViewItemHeader.Visibility = Visibility.Collapsed ;

默认情况下,Binding的模式设置为OneWay ,这正是您想要的,因为您的NavigationView将指定NavigationViewItemHeader的可视状态,而您不需要反过来。

创建一个类,它将成为您的转换器! 您的类必须inheritance自IValueConverter接口。 在我的例子中,我创建了一个名为“Converter”的文件夹,并在那里定义了BooleanToVisibilityConverter。

 namespace MyUWPApplication.Converter { class BooleanToVisibilityConverter : IValueConverter { public BooleanToVisibilityConverter() { } public object Convert(object value, Type targetType, object parameter, string language) { if (value is bool && (bool)value) { return Visibility.Visible; } return Visibility.Collapsed; } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } } } 

在你的XAML页面中包含上面的Namespace你的将会有所不同 ),如下所示:

 xmlns:common="using:MyUWPApplication.Converter" 

Bellow,定义您的Converter资源并为其提供密钥,以便您可以在Binding定义中引用它。

     

转换器资源BoolToVis在Binding定义中被引用,并且只要对IsPaneOpen属性进行了更改,就会调用Convert函数将我们的布尔值转换为Visibility。

结果:

在此处输入图像描述