2012-06-19 2 views
3

я получил некоторые проблемы в Datagrid WPFОтключен ряд на DataGrid WPF, чтобы быть отобранным при щелчке правой кнопки мышки

У меня есть DataGrid, и я хочу, чтобы установить свойство IsEnabled из одной строки в ложь, когда пользователь присвоить значение обязательного элемента в DataGrid ItemSource

Так что я сделал это с помощью 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> 

работает нормально, он отключает всю строку, если значение присваивается полю «Колуна» этой строки (отличной от нуля)

Проблема в следующем: я все еще могу щелкнуть и выбрать отключенную строку с помощью правой кнопки мыши ... Свойство IsEnabled блокирует только левую кнопку мыши, нажимает на строки datagrid? Нужно ли устанавливать другое свойство для отключения правой кнопки мыши на этой строке?

Спасибо!

ответ

5

Это известная ошибка DataGrid, о которой сообщается на Connect here: DatagridRow gets selected on right click even if the datagrid is disabled. Похоже, это будет исправлено в 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> 
+0

Спасибо! Работала отлично. –