WPF отключен DatagridRow и ContextMenu - PullRequest
1 голос
/ 23 марта 2020

У меня есть сетка данных, привязанная к коллекции пользовательских объектов.

Эта сетка данных позволяет пользователю получить доступ к контекстному меню, когда он щелкает правой кнопкой мыши по строке. Я делаю это с помощью стиля TextBlock:

<Style x:Key="DatagridTextblockStyle"
    TargetType="{x:Type TextBlock}">
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Header="First action" />
            </ContextMenu>
        </Setter.Value>
    </Setter>
</Style>

Он также отображает строки, которые могут быть отключены, если свойство bool "IsActive" пользовательского объекта имеет значение false.

Я делаю это через DataGrid.RowStyle :

<DataGrid ItemsSource="{Binding MyCustomObjects}">
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsActive}"
                             Value="True">
                    <Setter Property="IsEnabled"
                            Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

Это отлично работает. Проблема, однако, в том, что когда строка отключена, контекстное меню больше не доступно.

Я не могу найти способ обойти это.

Есть идеи?

1 Ответ

1 голос
/ 23 марта 2020

Установите для ContextMenuService.ShowOnDisabled присоединенного свойства значение true в ElementStyle:

<Style x:Key="DatagridTextblockStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="ContextMenuService.ShowOnDisabled" Value="True" />
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Header="First action" />
            </ContextMenu>
        </Setter.Value>
    </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...