Используйте DataTrigger, чтобы скрыть/показать WPF TreeView ContectMenu

77
9

У меня есть TreeView в моем приложении WPF, и я хочу показать или скрыть контекстное меню в зависимости от типа treeviewItem. TreeView привязывается к базе данных и заполняется с помощью HierarchicalDataTemplate. Я могу отключить элементы контекстного меню в коде в событии rightmouse. Но я хочу, чтобы это было сделано в XAML. То, что я пробовал;

<Grid.Resources>
<ContextMenu x:Key="MyContextMenu">
<MenuItem Name="Menu1" Header="Add " Click="AddNew_Click" ></MenuItem>
<MenuItem Name="Menu2" Header="" Click="Menu2_Click"></MenuItem>
</ContextMenu>
</Grid.Resources>

В стороне Treeview у меня есть этот код

<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Document.DocumentType}" Value="P">
<Setter TargetName="icon" Property="Source" Value="../Images/P.png"/>
*<Setter Property="ContextMenu" Value="{StaticResource MyContextMenu}"/>*

</DataTrigger>
</HierarchicalDataTemplate.Triggers>

Но это дает ссылку на объект среды выполнения, не установленную для экземпляра объекта. Вы можете видеть, что изображение установлено с помощью триггера данных, когда DocumentType - это "P", и я хочу, чтобы контекстное меню было видимым/включенным только тогда, когда DocumentType "P" и скрыть/отключить в противном случае. Это можно сделать?

спросил(а) 2021-01-26T00:55:38+03:00 4 месяца, 3 недели назад
1
Решение
109

У другого человека была такая же проблема, и он получил этот ответ с форума Microsoft. Он не использует триггеры, однако контекст является динамическим. Я могу использовать вариант этого, чтобы показать свое контекстное меню только тогда, когда оно мне нужно, в зависимости от связанных данных.

Ссылка здесь

Я отмечу это как ответ, так что это может помочь кому-то в будущем.

ответил(а) 2021-01-26T00:55:38+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема