我似乎有衝突的要求。我有一個複選框作爲第一列的DataGrid。用戶希望複選框可以通過單擊進行選擇,而不是雙擊。我是能夠使使用DataGridTemplateColumn和這樣一個複選框,發生:在複選框上使用DataGrid上的ScrollIntoView更改行爲
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
用戶也允許他們指定行控制(可以有數百行)。如果他們指定了一個不在視圖中的行,我希望它滾動到視圖中。我妥協並在DataGrid_SelectionChanged事件的後面代碼中添加了一個事件處理程序。最初我只是使用ScrollIntoView命令,但屏幕外的行會突出顯示,但網格不會將它們滾動到視圖中。然後,我可以添加一個Focus命令,並將該行滾動到視圖中。所以,現在的事件處理程序是這樣的:
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if (dg.SelectedItem == null) return;
dg.ScrollIntoView(dg.SelectedItem);
dg.SelectedItem.Focus();
}
現在我回到原來的問題,該行滾動到視圖,但來檢查任何其他行的複選框(您不要通過進入跳轉到行控制),你必須點擊兩次。有人知道是什麼導致行移動到手動需要雙擊?
我無法獲得'dg.SelectedItem.Focus()'方法。你確定這是你的代碼嗎?無論如何,如果沒有它,我可以讓dataGrid將selectedItem滾動到視圖中(我假設在另一個控件中設置了selectedItem),並且單擊複選框dataTemplate在所有其他行上都像一個魅力一樣工作......您的代碼示例中是否存在某些內容? – philt5252
您的權利,我以爲我複製和粘貼,但我嘗試了很多事情(並有點沮喪),我不能再確定是什麼原因造成的問題,但我確實找到了答案。 – Tod
好吧,至少它的工作:P – philt5252