2017-02-23 65 views
0

被選中,我很新的WPF所以那種......WPF數據網格 - 如何阻止細胞在選擇一個子控件

我把一些孩子的控制到一個DataGrid細胞,但當我選擇(點擊)其中一個子控件時,包含單元格顯示藍色選擇高亮。有沒有辦法改變這個功能,所以它只是選擇被點擊的控件。

我希望我可以通過將選擇顏色更改爲透明或某些東西來解決此問題,但選擇會更改外觀,如果用戶再次點擊ArrowDown鍵,我希望選擇從控件移動到我認爲的被選中不是DataGrid認爲被選中的單元格。

理想情況下,我想管理DataGrid中的所有選擇和導航。

enter image description here

在我將要被選擇

+1

如果程度較重,你很可能有一個'ItemsControl'而不是'DataGrid'做到這一點。不過這裏有一個關於DataGrid的想法:http://stackoverflow.com/a/2502523/424129 –

回答

1

含有Neil9232控制在你CellTemplate的例子中,設置Focusable爲false。它將停止搶奪你的點擊。例如,如果你目前沒有樣式集,這將是最低限度:

<DataGrid> 
     <DataGrid.Resources> 
      <Style x:Key="NotFocusable" TargetType="{x:Type DataGridCell}"> 
       <Setter Property="Focusable" Value="False"/> 
      </Style> 
     </DataGrid.Resources> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellStyle> 
        <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource NotFocusable}"/> 
       </DataGridTemplateColumn.CellStyle>      
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

太棒了,這幾乎消除了鼠標和鍵盤交互中的所有數據網格。我不得不使用我自己的處理程序來構建該功能。我開始認爲dataGrid並不完全是這個的正確控制,我需要基本的網格佈局和行虛擬化,在推進之前有什麼建議? – Sprotty

+0

例如,您可以使用處理程序在雙擊單元格時將其集中到內部子控件上。或者使用一個處理程序來處理selecteditem的更改,並將注意力集中到內部控件上。或者你可以使用'IEditableObject.BeginEdit',在視圖模型中觸發屬性更改,並綁定觸發器來設置可聚焦。 – NWoodsman