我在 Datagrid WPF 中遇到一些问题
我有一个数据网格,每当用户为数据网格 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
Connect 上对此进行了报道:即使数据网格被禁用,DatagridRow 也会在右键单击时被选中 http://connect.microsoft.com/VisualStudio/feedback/details/680994/datagridrow-gets-selected-on-right-click-even-if-the-datagrid-is-disabled. 看起来这个问题将在 WPF 4.5 中得到修复。
要解决这个问题,您可以绑定IsHitTestVisible
to 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)