在我的Silverlight 4 DataGrid
控件中,我想附加一個非常簡單的行爲,它在關鍵按鈕上執行一個自定義命令 - 實際上,按下ENTER鍵提交DataGrid中的選定項目。行爲中的Silverlight KeyDown事件
雖然行爲實際工作(見我的代碼...
//.... in "OnAttached()..."
this.AssociatedObject.AddHandler(Control.KeyDownEvent, new KeyEventHandler(OnKeyDown), true);
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
InvokeCommand();
}
}
...)我有問題,即在DataGrid似乎處理回車按鍵本身並前進到下一行。顯然,發生的是錯誤的行被提交,因爲當我處理按鍵時,行selectedion已經改變。
這裏是XAML:
<data:DataGrid
AutoGenerateColumns="False"
IsReadOnly="True"
ItemsSource="{Binding Path=Data}"
SelectedItem="{Binding SelectedRow, Mode=TwoWay}">
<data:DataGrid.Columns>
<data:DataGridTextColumn Binding="{Binding A}" />
<data:DataGridTextColumn Binding="{Binding B}" />
<data:DataGridTextColumn Binding="{Binding C}" />
</data:DataGrid.Columns>
<i:Interaction.Behaviors>
<behaviors:EnterBehavior Command="{Binding CommitCommand}" />
</i:Interaction.Behaviors>
</data:DataGrid>
你能告訴我怎樣才能阻止默認ENTER事件?
是否可以添加e.handled = true?如果是這樣,也許這有助於:) – 2011-02-14 12:54:31
@Theun是的,這是可能的,但它已經爲時已晚,我可以設置。當調用OnKeyDown時,它似乎已經被DataGrid處理/使用了 – thmshd 2011-02-14 14:11:17