我有一個Silverlight 4.0數據網格,其中SelectionMode
設置爲Single
。問題在於用戶需要CTRL +單擊已選擇的行才能取消選擇(並且沒有在網格中選擇任何內容)。我希望他們能夠簡單地左鍵單擊已選擇的行以取消選中它。從Silverlight數據網格取消選擇項目,如果它被點擊兩次
我試圖用SelectionChanged
事件(檢查事件參數中添加的項目)執行此操作,但它不起作用,因爲當用戶單擊同一行兩次時不會引發事件。
有什麼建議嗎?
我有一個Silverlight 4.0數據網格,其中SelectionMode
設置爲Single
。問題在於用戶需要CTRL +單擊已選擇的行才能取消選擇(並且沒有在網格中選擇任何內容)。我希望他們能夠簡單地左鍵單擊已選擇的行以取消選中它。從Silverlight數據網格取消選擇項目,如果它被點擊兩次
我試圖用SelectionChanged
事件(檢查事件參數中添加的項目)執行此操作,但它不起作用,因爲當用戶單擊同一行兩次時不會引發事件。
有什麼建議嗎?
無法捕獲第二個事件,因爲它從未被解僱。你可以做的是應用,它捕捉到第二次點擊在這個項目中使用一個定製的類型和觸發事件,你應該希望第二次:
http://www.codeproject.com/KB/silverlight/doubleClickDataGridSL.aspx
我也有同樣的任務,所以在這裏是我的解決方案: 使用AddHandler dataGrid.AddHandler(UIElement.MouseLeftButtonDownEvent,new MouseButtonEventHandler(DataGrid_MouseLeftButtonDown),true)爲datagrid的MouseLeftButtonDown事件附加處理程序; ,保存的SelectedIndex在私有變量
private int prevSelectedIndex;
void DataGrid_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (prevSelectedIndex != -1 && prevSelectedIndex == dataGrid.SelectedIndex)
{
dataGrid.SelectedIndex = -1;
}
prevSelectedIndex = dataGrid.SelectedIndex;
}
,如果你想重新使用這個邏輯,你可以創建一個DataGrid的行爲類型
添加System.Windows.Interactivity裝配基準,添加類DataGridSecondClickUnselectBehavior
public class DataGridSecondClickUnselectBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown), true);
}
private int prevSelectedIndex;
void AssociatedObject_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (prevSelectedIndex != -1 && prevSelectedIndex == AssociatedObject.SelectedIndex)
{
AssociatedObject.SelectedIndex = -1;
}
prevSelectedIndex = AssociatedObject.SelectedIndex;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.RemoveHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown));
}
}
現在,在混合編譯解決方案後,您可以將此行爲簡單地從資產→行爲拖放到DataGrid控件
這是DataGrid只讀嗎? – 2011-03-21 21:03:32
這是正確的。用戶不能直接編輯網格中的項目。 – 2011-03-21 21:04:41