在WPF的数据表格中,当使用右键单击时选中了已禁用的行。

3

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

我有一个Datagrid,并且当用户给Datagrid的ItemSource绑定项分配一个值时,我想将单个行的IsEnabled属性设置为false。

因此,我通过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个回答

5
这是关于DataGrid的已知错误,并且在Connect上有报告:DatagridRow gets selected on right click even if the datagrid is disabled。看起来这个问题将在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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接