Tôi đã thực sự hy vọng rằng sẽ có một ra khỏi dung dịch hộp cho một use-case thông thường như vậy trong Silverlight 4, nhưng tiếc là tôi không nghĩ rằng có.
Có một triển khai Nút mặc định khác của Patrick Cauldwell. Anh ấy cũng sử dụng Thuộc tính được đính kèm.
Tôi đã thử nghiệm điều này trong một ứng dụng SL 4 và dường như thực hiện công việc.
Bạn có thể tìm mã ở đây: http://www.cauldwell.net/patrick/blog/DefaultButtonSemanticsInSilverlightRevisited.aspx
Edit: tôi đã điều chỉnh đang David Justice để làm cho nó làm việc cho Silverlight 4. Tôi vừa mới thay đổi GetDefaultButton và SetDefaultButton lấy và trả lại một DefaultButtonService. Cách sử dụng giống như được ghi trên trang web của anh ấy. Điều này sẽ phù hợp với bạn:
Chỉnh sửa2: Thêm ví dụ XAML để làm rõ.
public class DefaultButtonService
{
public static DependencyProperty DefaultButtonProperty =
DependencyProperty.RegisterAttached("DefaultButton",
typeof(Button),
typeof(DefaultButtonService),
new PropertyMetadata(null, DefaultButtonChanged));
private static void DefaultButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uiElement = d as UIElement;
var button = e.NewValue as Button;
if (uiElement != null && button != null)
{
uiElement.KeyUp += (sender, arg) =>
{
if (arg.Key == Key.Enter)
{
var peer = new ButtonAutomationPeer(button);
var invokeProv =
peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
if (invokeProv != null)
invokeProv.Invoke();
}
};
}
}
public static DefaultButtonService GetDefaultButton(UIElement obj)
{
return (DefaultButtonService)obj.GetValue(DefaultButtonProperty);
}
public static void SetDefaultButton(DependencyObject obj, DefaultButtonService button)
{
obj.SetValue(DefaultButtonProperty, button);
}
}
Làm thế nào để áp dụng trong XAML:
<StackPanel>
<TextBox DinnerConfig:DefaultButtonService.DefaultButton="{Binding ElementName=MyButton}"
Text="Press Enter" />
<Button x:Name="MyButton"
Content="Click me" />
</StackPanel>
Nguồn
2010-04-29 05:16:33
Cảm ơn. Cách tiếp cận của David và Patricks khá giống nhau - mặc dù tôi rất vui khi thấy rằng vấn đề không phải với SL4, phải là một kịch bản cụ thể liên quan đến ứng dụng của chúng tôi. Cảm ơn bạn đã dành thời gian trả lời +1 –
Không phải phương thức "Get/SetDefaultButton" trả về/nhận một Nút thay vì một DefaultButtonService? Loại được đề cập là loại giá trị thực được truy xuất/lưu trữ trong thuộc tính. Tôi đã tự mình thay đổi và nó đang hoạt động. – Trinition
Có, Trinition, bạn là chính xác. Nếu bạn muốn thêm một ví dụ, tôi sẽ bình chọn câu trả lời của bạn là chính xác. Bạn có thể sao chép ví dụ của tôi được thêm từ bên dưới nếu bạn muốn. –