【问题标题】:Disabled row on Datagrid WPF getting selected when clicked with the Right Mouse Button使用鼠标右键单击时,Datagrid WPF 上的禁用行被选中
【发布时间】:2012-06-21 20:58:41
【问题描述】:

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

我有一个数据网格,我想在用户为数据网格 itemSource 的绑定项赋值时将单行的 IsEnabled 属性设置为 false

所以我通过datagrid Style triggers做到了:

               <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”属性是否仅阻止鼠标左键单击数据网格行?我是否需要设置另一个属性来禁用鼠标右键单击该行?

谢谢!

【问题讨论】:

    标签: wpf xaml datagrid right-click


    【解决方案1】:

    这是DataGrid 的一个已知错误,它在此处的连接上报告: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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      相关资源
      最近更新 更多