Я действительно надеялся, что было бы из раствора коробки для такого общего потребительной случае в Silverlight 4, но, к сожалению, я не думаю, что есть.
Существует еще одна реализация кнопки «По умолчанию» Патрика Коулдуэлла. Он также использует Attached Properties.
Я тестировал это в приложении SL 4 и, похоже, выполнял эту работу.
Вы можете найти код здесь: http://www.cauldwell.net/patrick/blog/DefaultButtonSemanticsInSilverlightRevisited.aspx
Edit: Я подправили код Дэвид Джастис, чтобы получить его работу на 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>
Спасибо. Подходы Дэвида и Патрика практически совпадают - хотя я рад видеть, что проблема не в SL4, должен быть конкретный сценарий, связанный с нашим приложением. Спасибо, что нашли время для ответа +1 –
Не следует ли методам Get/SetDefaultButton возвращать/брать кнопку вместо функции DefaultButtonService? Тип, о котором идет речь, относится к типу фактического значения, которое извлекается/сохраняется в свойстве. Я сделал это изменение сам, и он работает сейчас. – Trinition
Да, Trinition, вы правы. Если вы хотите добавить пример, я буду голосовать за ваш ответ правильно. Вы можете скопировать мой пример, добавленный снизу, если хотите. –