Мое приложение реализовано GridView
внутри TreeList
.
К моему отчаянию я обнаружил, что GridView очень примитивен по сравнению с широко используемым DataGrid
. Я рассматриваю эти два варианта:
(1) Как-то я заменю GridView на DataGrid (который поддерживает контекстное меню).
(2) Как-то я добавляю возможность контекстного меню к существующему GridView.
Какой из двух подходов (или другой?) Вы бы порекомендовали?
Исходный код очень ценится.
ТИА.
На основе связанного кода, вот решение:
1 - Добавьте ContextMenu
в качестве ресурса:
<Window.Resources>
<ContextMenu x:Key="ItemsContextMenu" x:Shared="False">
<MenuItem>
<MenuItem.Header>
<TextBlock>
<Run>Context Menu Action for Item</Run>
<Run Text="{Binding Tag.Name}"/>
</TextBlock>
</MenuItem.Header>
</MenuItem>
</ContextMenu>
<!-- other stuff here -->
</Window.Resources>
Рекомендуется установить x:Shared="False"
чтобы предотвратить проблемы с привязкой, связанные с повторным использованием экземпляра ресурса.
2 - Определите ItemContainerStyle
для вашего TreeList, который устанавливает ContextMenu для TreeListItem
s:
<tree:TreeList ...>
<!-- other stuff here -->
<tree:TreeList.ItemContainerStyle>
<Style TargetType="{x:Type tree:TreeListItem}">
<Setter Property="ContextMenu" Value="{StaticResource ItemsContextMenu}"/>
</Style>
</tree:TreeList.ItemContainerStyle>
</tree:TreeList>
Обратите внимание, что я использую DataBinding в ContextMenu
, что означает, что в нем есть правильный рабочий DataContext
. Вы должны иметь возможность использовать в нем Commands
и другие вещи.
SharedSizeGroup
TreeView может иметь контекстные меню?