2012-06-19 68 views
3

我DataGrid中的WPF殘疾人行時用鼠標右鍵

我有一個DataGrid有一些問題點擊,我想一個單行的IsEnabled屬性每當用戶設置爲false賦值到DataGrid的結合項目的ItemSource

所以我通過數據網格樣式使其觸發:

   <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」字段中的整個行(不同的是)

問題是:我仍然可以單擊並使用鼠標右鍵選擇禁用的行......「IsEnabled」屬性是否僅阻止鼠標左鍵點擊datagrid行?我是否需要設置另一個屬性來禁用鼠標右鍵單擊該行?

謝謝!

回答

5

這是DataGrid的一個已知錯誤,它在Connect這裏報告: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

謝謝!完美工作。 –