使用鼠标右键单击时,Datagrid WPF上禁用的行被选中

Raf*_* S. 3 wpf xaml datagrid right-click

我在Datagrid WPF中遇到了一些问题

我有一个datagrid,每当用户为datagrid itemSource的绑定项赋值时,我想将单行的IsEnabled属性设置为false

所以我通过datagrid Style触发器创建它:

               <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>
Run Code Online (Sandbox Code Playgroud)

工作正常,当一个值分配给该行的"Coluna"字段时(不同的null),它会禁用整行

问题是:我仍然可以使用鼠标右键单击并选择禁用的行..."IsEnabled"属性是否仅阻止鼠标左键单击数据网格行?我是否需要设置另一个属性来禁用该行上的鼠标右键单击?

谢谢!

Fre*_*lad 5

这是一个已知的错误,DataGrid它在Connect here上报告:即使数据网格被禁用,右键单击也会选择DatagridRow.看起来这将在WPF 4.5中修复.

要解决它,你可以绑定IsHitTestVisibleIsEnabled

<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>
Run Code Online (Sandbox Code Playgroud)