我一直在试用WinUI 3 Gallery应用程序。在XAML中,我将TreeView的IsEnabled属性设置为False。例如,我将IsEnabled="False"
添加到xaml中:https://github.com/microsoft/WinUI-Gallery/blob/1d61342cd0a646d8d56758048315b34ef42864bf/WinUIGallery/ControlPages/TreeViewPage.xaml#L46
我的期望是TreeViewItem
将使用下面定义的TreeViewItemForegroundDisbled
笔刷来呈现它们自己:https://github.com/microsoft/microsoft-ui-xaml/blob/8390ab44f93e643434059d45aefb29b2f7070a87/dev/TreeView/TreeView_themeresources.xaml#L22
TreeView控件确实被禁用了,因为它不响应鼠标或键盘。但是TreeViewItem
的呈现没有改变。视觉外观保持不变,这在我看来会误导/混淆用户。我希望它像其他控件一样显示为禁用,如TextBox、Button等。
作为一种绝望的行为,我还尝试将TreeViewItem的IsEnabled
属性绑定到父TreeView
的IsEnabled
属性,如下所示:
<TreeView x:Name="treeNodes" Grid.Column="0" Margin="8"
IsEnabled="False"
ItemsSource="{x:Bind RootNodes}" SelectedItem ="{x:Bind SelectedNode, Mode=TwoWay}">
<TreeView.ItemTemplate>
<DataTemplate x:DataType="vm:ConfigNodeVM">
<TreeViewItem ItemsSource="{x:Bind Children}" Content="{x:Bind Name}"
IsEnabled="{Binding ElementName=treeNodes, Path=IsEnabled, Mode=OneWay}"/>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
但那也没用。
为什么TreeNodeItem
没有呈现为“禁用”状态?当TreeView
的IsEnabled="False"
处于禁用状态时,我可以做些什么来使它们呈现为禁用状态?
(and,作为奖励,我可以在microsoft-ui-xaml repo的WinUI源代码中读到什么,这将使我理解为什么禁用的画笔没有像我期望的那样使用?)
谢谢。
1条答案
按热度按时间2g32fytz1#
我认为这是TreeView控件的问题。将TreeViewItem的
IsEnabled
设置为false
时,VisualState无法正确更新。作为解决方法,您可以调用VisualStateManger.GoToState(item, "Disabled", true)
或使用以下内容重写TreeViewItem的模板: