2011-07-21 48 views
3

我想弄清楚如何讓以下WPF DataGrid中的行不可聚焦。正如你所看到的,我嘗試在DataGrid中添加一個<DataGrid.Resources>節,我在其中指定DataGrid單元格樣式,但這不起作用。我錯過了什麼?讓行在WPF數據網格中不可聚焦

<DataGrid Name="grdResources" 
AutoGenerateColumns="False" SelectionUnit="FullRow" 
AlternatingRowBackground="LightBlue" CanUserDeleteRows="False" CanUserAddRows="False" 
CanUserReorderColumns="False" ClipboardCopyMode="ExcludeHeader"> 

<DataGrid.Resources> 
    <DataGridTemplateColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="Focusable" Value="False"/> 
     </Style> 
    </DataGridTemplateColumn.CellStyle> 
</DataGrid.Resources> 

<DataGrid.Columns> 
    <DataGridTemplateColumn Header="Select" IsReadOnly="True" > 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox Name="Select" Tag="{Binding}" Click="Select_Click"/> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

    <DataGridTemplateColumn Header="Key" IsReadOnly="True"> 
     <DataGridTemplateColumn.CellTemplate > 
      <DataTemplate> 
       <Label Content="{Binding Path=Key}"></Label> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

    <DataGridTemplateColumn Header="Value" IsReadOnly="True"> 
     <DataGridTemplateColumn.CellTemplate > 
      <DataTemplate> 
       <TextBlock TextWrapping="Wrap" Text="{Binding Path=Value}"/> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
</DataGrid.Columns> 

編輯 對於那些有興趣,我結束了重寫SelectedRow樣式,以便選擇時,它不突出顯示該行。這是我改變之後<DataGrid.Resources>部分:

<DataGrid.Resources> 
     <Style TargetType="{x:Type DataGridCell}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Background" Value="Transparent"/> 
        <Setter Property="Foreground" Value="Black"/> 
        <Setter Property="BorderBrush" Value="Transparent"/> 
        <Setter Property="BorderThickness" Value="1"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 

回答

6

使用IsHitTestVisible = False

<DataGrid.Resources> 
    <Style x:Key="NoFocusColumStyle" TargetType="{x:Type DataGridCell}"> 
     <Setter Property="IsHitTestVisible" Value="False"/> 
    </Style> 
</DataGrid.Resources> 

然後將該樣式應用到要限制重點

<DataGridTextColumn CellStyle="{StaticResource NoFocusColumStyle}" ... /> 
+0

感謝任何列!這適用於使行不可聚焦,但是,我有一個複選框列作爲DataGrid中用於行選擇的第一列,這使複選框不可點擊。 – Tom

+0

@Tom將一個鍵添加到您的樣式中,並在'DataGrid.Columns'中將單元格樣式應用於應爲只讀的列。 '' – Rachel

+0

儘管如此,仍然可以選中該複選框列。我希望能夠單擊複選框來選擇沒有任何單元格被選中並隨後突出顯示的行。對不起,如果我沒有在我的OP – Tom