Silverlight 4 でこのような一般的なユース ケースにすぐに使用できるソリューションがあることを本当に望んでいましたが、残念ながら存在しないと思います。
Patrick Cauldwell による別の Default Button 実装があります。彼は添付プロパティも使用しています。
SL 4 アプリケーションでこれをテストしましたが、うまくいくようです。
ここでコードを見つけることができます:
http://www.cauldwell.net/patrick/blog/DefaultButtonSemanticsInSilverlightRevisited.aspx
編集:
David Justice のコードを微調整して、Silverlight 4 で動作するようにしました。GetDefaultButton と SetDefaultButton を変更して、DefaultButtonService を受け取って返すようにしました。使用法は彼のウェブサイトに記載されているものと同じです。これはあなたのために働くはずです:
Edit2:
わかりやすくするために XAML の例を追加しました。
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);
}
}
XAML で適用する方法:
<StackPanel>
<TextBox DinnerConfig:DefaultButtonService.DefaultButton="{Binding ElementName=MyButton}"
Text="Press Enter" />
<Button x:Name="MyButton"
Content="Click me" />
</StackPanel>