2009-11-18 2 views

ответ

30

Там будет никакой встроенной Button.DialogResult, но вы можете создать свой собственный (если хотите), используя простой вложенное свойство:

public class ButtonHelper 
{ 
    // Boilerplate code to register attached property "bool? DialogResult" 
    public static bool? GetDialogResult(DependencyObject obj) { return (bool?)obj.GetValue(DialogResultProperty); } 
    public static void SetDialogResult(DependencyObject obj, bool? value) { obj.SetValue(DialogResultProperty, value); } 
    public static readonly DependencyProperty DialogResultProperty = DependencyProperty.RegisterAttached("DialogResult", typeof(bool?), typeof(ButtonHelper), new UIPropertyMetadata 
    { 
    PropertyChangedCallback = (obj, e) => 
    { 
     // Implementation of DialogResult functionality 
     Button button = obj as Button; 
     if(button==null) 
      throw new InvalidOperationException(
      "Can only use ButtonHelper.DialogResult on a Button control"); 
     button.Click += (sender, e2) => 
     { 
     Window.GetWindow(button).DialogResult = GetDialogResult(button); 
     }; 
    } 
    }); 
} 

Это позволит вам написать:

<Button Content="Click Me" my:ButtonHelper.DialogResult="True" /> 

и получить поведение эквивалентно WinForms (нажатие на кнопку вызывает диалоговое окно, чтобы закрыть и вернуть указанный результат)

+0

Я узнал новый материал в herer, этот attatching, eventho im не собирается использовать его в этом случае, конечно будет полезно! Большое спасибо – Shimmy

+0

Я никогда не знал о функции GetWindow, это просто потрясающе! – Shimmy

+0

Отличное решение, сделанное по своей простоте. –

17

В WPF нет Button.DialogResult. Вы просто должны установить DialogResult в Window истинный или ложный:

private void buttonOK_Click(object sender, RoutedEventArgs e) 
{ 
    this.DialogResult = true; 
} 
+2

@Shimmy: Это должно быть принято на самом деле. – Mangesh

1

Просто убедитесь, что вы показали форму с помощью ShowDialog, а не Show. Если вы сделаете последнее, вы получите следующее исключение поднятый:

InvalidOperationException был необработанное

DialogResult может быть установлен только после того, как окно создается и отображается в диалоговом окне. не

-4
MessageBoxResult result = MessageBox.Show("",""); 

if (result == MessageBoxResult.Yes) 
{ 
// CODE IN HERE 
} 
else 
{ 
// CODE IN HERE 
} 
+2

'MessageBoxResult result = new MessageBoxResult();' I lol'd – Will

+0

Этот код даже не работает ... 'MessageBox.Show (" "," ");' не будет показывать кнопки Yes | No. – qJake

 Смежные вопросы

  • Нет связанных вопросов^_^