Mam aplikację, która ma główne okno zawierające kilka rzeczy. Od czasu do czasu użytkownik zrobi coś w odpowiedzi, na które chcę wyświetlić coś zupełnie innego w głównym oknie, tymczasowo ukrywając to, co jest.WPF: Ustawianie ostrości klawiatury w kontroli użytkownika? (Problemy z KeyBinding)
Robię to poprzez uczynienie najbardziej zewnętrznego elementu w głównym oknie siatki bez zdefiniowanego wiersza lub kolumny. Każdy element w siatce całkowicie wypełni pojedynczą komórkę w siatce, czerpiąc ją z pozostałych.
Moje zwykłe rzeczy w wiązce znajdują się w pierwszym elemencie siatki, a moje tymczasowe coś innego to UserControl jako drugi element siatki, czyli zwykle ustawiony Visibility = Collapsed.
Z wyjątkiem KeyBinding wszystko działa dobrze. Kiedy odpowiednie polecenie zostanie uruchomione w zwykłym pakiecie rzeczy, widoczność w UserControl jest ustawiona na Visible i całkowicie obejmuje zwykły pakiet rzeczy. Kiedy użytkownik kliknie przycisk zamykania kontrolki UserControl, jego widoczność jest ponownie ustawiona na zwiniętą, a znika i pojawia się regularna wiązka rzeczy.
Mój problem dotyczy KeyBindings. Mam kilka zdefiniowanych w UserControl - które nie powinny być zdefiniowane w głównym oknie - i nie działają. Lub raczej działają dobrze po kliknięciu w UserControl, ale nie działają, dopóki nie zrobię.
Potrzebuję ich do pracy, gdy tylko UserControl stanie się widoczny, bez konieczności klikania lub przechwytywania przez UserControl.
Domyślam się, że ma to coś wspólnego z ustawieniem ostrości na klawiaturze - ale nie byłem w stanie znaleźć sposobu na skupienie się na UserControl. Oto rzecz - jedynym elementem w UserControl jest kontrolka zakładki, której wszystkie zakładki są dynamicznie konstruowane za pomocą szablonów. Nie ma żadnych elementów znanych podczas kompilacji, które można jawnie odwołać i przekazać do KeyBoard.Focus().
Czy mam rację, sądząc, że przyczyną problemu jest brak ostrości? A jeśli tak, to w jaki sposób ustawić fokus na element w TabControl, kiedy nie wiem nawet, ile kart jest tam, nie mówiąc już, który jest wybrany?
dlaczego nie możesz bezpośrednio ustawić kontroli użytkownika. Jak w, Keyboard.Focus (userControl)? –
Świetne pytanie. To nie działa. Mogę wywołać KeyBoard.Focus() na kontrolerze, ale metoda Gotfocus kontrolki nie uruchamia się. –
Ale jeśli ustawię Focusable = "True" na formancie, to robi to. Dziękuję za sprawienie, że zajrzę we właściwe miejsce. –