Строки отключена на элементе управления DataGrid в WPF получения выбранного при нажатии правой кнопкой мыши


У меня возникли некоторые проблемы в Datagrid WPF

У меня есть datagrid, и я хочу установить свойство IsEnabled одной строки в false всякий раз, когда пользователь присваивает значение элементу привязки DataGrid itemSource

Поэтому я сделал это с помощью триггеров стиля datagrid:

               <DataGrid AutoGenerateColumns="False" Margin="9,35,0,6" Name="dataGrid2" ItemsSource="{Binding}" SelectionChanged="dataGrid2_SelectionChanged" IsReadOnly="True" SelectionMode="Single">
                    <DataGrid.RowStyle>


                        <Style TargetType="{x:Type DataGridRow}">
                            <Style.Setters>
                                <Setter Property="IsEnabled" Value="False" />
                            </Style.Setters>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=Coluna}" Value="{x:Null}">
                                    <Setter Property="IsEnabled" Value="True"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>



                    </DataGrid.RowStyle>
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Campo" Binding="{Binding Path=Campo}" Width="1.4*" CanUserSort="False" />
                        <DataGridTextColumn Header="Coluna/Constante" Binding="{Binding Path=Coluna}" CanUserSort="False" Width="*" />
                    </DataGrid.Columns>
                </DataGrid>

Работает нормально, он отключает всю строку, когда значение присваивается полю "Coluna" этой строки (отличному от null)

Проблема в том, что я все еще могу щелкнуть и выбрать отключенную строку с помощью правая кнопка мыши... Блокирует ли свойство "IsEnabled" только щелчок левой кнопкой мыши по строкам datagrid?? Нужно ли установить другое свойство, чтобы отключить щелчок правой кнопкой мыши по этой строке?

Спасибо!

1 3

1 ответ:

Это известная ошибка DataGrid, и она сообщается на Connect here: DatagridRow выбирается при щелчке правой кнопкой мыши, даже если datagrid отключен. похоже, что это будет исправлено в WPF 4.5.

Чтобы обойти его, вы можете привязать IsHitTestVisible к IsEnabled

<DataGrid ...>
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Setter Property="IsEnabled" Value="False" />
            <Setter Property="IsHitTestVisible"
                    Value="{Binding RelativeSource={RelativeSource Self},
                                    Path=IsEnabled}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Coluna}" Value="{x:Null}">
                    <Setter Property="IsEnabled" Value="True"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    <!-- ... -->
</DataGrid>