UWP – 防止NavigationViewItemHeader被剪裁
我正在编写一个UWP应用程序,其中包含一个包含NavigationViewItemHeader
:
(等等)
但是,当我折叠视图时,标题会被剪切:
我该怎么做才能防止这种情况发生?
解决方案1
增加项目标题的左边距:
...
解决方案2
通过将CompactModeThresholdWidth
和ExpandedModeThresholdWidth
设置为某个大数字来禁用NavigationView
的紧凑和扩展显示模式:
解决方案3
如IsPaneOpen
建议的那样,将项目标题的Visibility
属性绑定到NavigationView
的IsPaneOpen
属性,只使用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。
结果: