2011-03-25 7 views
9

Mam formant użytkownika winforms z wieloma przyciskami w formancie WPF.Ustawienie "AcceptButton" z WPF WindowsFormHost

Moje usercontrol wcześniej gościł w postaci okien i udało mi się tak

this.ParentForm.AcceptButton = this.btnSearch; 

Próbuję ustalić, jak zrobić podobny na usercontrol teraz, że jest w WindowsFormHost. Właściwość ParentForm ma wartość NULL.

Są dwie rzeczy, które chciałbym idealnie osiągnąć.

  1. zachowanie AcceptButton (klawisz Enter) naciśnij przycisk wyzwalaczy
  2. AcceptButton formatowanie - to znaczy przycisk winforms ma formatowanie alternatywną dla zaakceptować przyciski stosowane.

Dziękujemy, Chris

Odpowiedz

1

WPF Window s nie mają koncepcji Windows Forms z AcceptButton. Prawdopodobnie nie będziesz w stanie uzyskać klucza Enter, aby automatycznie włączyć obsługę . Ponadto nie będzie można również uzyskać alternatywnego stylu przycisku akceptowania.

Można potencjalnie narazić metodę na formancie Windows Forms, który działa tak, jak kliknąłeś przycisk wyszukiwania, i wywołać tę metodę ze strony WPF po naciśnięciu klawisza Enter. W przeciwnym razie okaże się, że brakuje interakcji między formantami Forms i formantami WPF (WindowsFormsHost nigdy nie było przeznaczone do zapewnienia pełnego dostępu do wierności).

+0

Myślałem/obawiałem się, że tak było. Pozostawienie bez odpowiedzi przez kilka kolejnych dni, aby sprawdzić, czy pojawią się lepsze pomysły. Twoje zdrowie – Chris

0

Nie jestem pewien, ale można ustawić ostrość na tym przycisku? Miałoby to takie samo zachowanie, jak w winformach.

+0

"Przycisk akceptacji" nie ma fokusa (normalnie). Jest "kliknięty", gdy użytkownik naciśnie klawisz Enter w innej kontrolce (która ma fokus), jeśli ta kontrola jest skonfigurowana tak, aby nie akceptować Wprowadzanie naciśnięć klawiszy. Jest to funkcja IsDialogMessage. – Tergiver

+0

Wiedz o tym Tergiverze, pomyśl tylko o obejściu :) –

+0

Potrzebuję pole tekstowe, aby się skupić - przypadek użycia jest polem wyszukiwania, a naciśnięcie enter powinno wywołać wyszukiwanie.Wolałbym nie wdrażać obsługi klawiatury na pole w winformach, aby obsługiwać wpf. – Chris

14

Ustaw Button.IsCancel (Esc) lub IsDefault (Enter) na przyciskach na stronie.

przykład:

<Button Content="Yes" Click="Yes_Button_Click" IsDefault="True"/> 
<Button Content="No" Click="No_Button_Click" IsCancel="True"/> 
0

Jest to niefortunne, nie AcceptButton WPF - i uciążliwe.

Pomyślnie zaimplementowałem tę funkcjonalność, korzystając z zdarzenia FormUp KeyUp. Oto kod:

private void Window_KeyUp(object sender, KeyEventArgs e) 
{ 
    if(e.Key == Key.Enter) 
    { 
     TargetButton_Click(sender, null); 
    } 
} 

wydaje się działać prawidłowo. W moim przypadku mam pola tekstowe na formularzu WPF, a użytkownik wprowadza wartości i trafienia i wydaje się, że działa dobrze. Mogą występować problemy z pewną kontrolą, która przesłania (przechwytuje zdarzenie KeyUp) przed formularzem lub czymś, co może się różnić. :)

0

Ustawia domyślną właściwość przycisku na IsDefault na true.

Powiązane problemy