3

Datagrid WPF で問題が発生しました

データグリッドがあり、ユーザーがデータグリッド itemSource のバインド項目に値を割り当てるたびに、単一行の IsEnabled プロパティを false に設定したい

だから私はデータグリッドスタイルのトリガーでそれを作りました:

               <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」プロパティは、データグリッド行でのマウスの左ボタンのクリックのみをブロックしますか?? その行でのマウスの右ボタンのクリックを無効にするには、別のプロパティを設定する必要がありますか?

ありがとうございました!

4

1 に答える 1

5

これはの既知のバグであり、DataGridここで接続について報告されています。データグリッドが無効になっている場合でも、右クリックでDatagridRowが選択されますこれはWPF4.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>
于 2012-06-19T19:01:06.637 に答える