Tytuł prawie wyjaśnia pytanie. Mam kontrolę użytkownika załadowaną do głównego okna, gdy aplikacja jest uruchamiana po raz pierwszy. Co chcę zrobić, to podnieść zdarzenie w oknie nadrzędnym po kliknięciu przycisku na kontroli użytkownika, więc jak mogę podnieść wydarzenie nadrzędne z przycisku 1_Click na formancie użytkownika?Podnoszenie zdarzenia w oknie nadrzędnym za pomocą formantu użytkownika w .NET C#
Odpowiedz
Musisz RoutedEvent link
„trasowane zdarzenia są zdarzeniami, które pływają w górę lub w dół wizualnej drzewa acording do ich RoutingStrategy. Strategia routingu może być bańka, tunel lub bezpośredni. Można podłączyć do obsługi zdarzeń na element, który podnosi zdarzenie lub też inne elementy nad i pod nim, używając dołączonej składni zdarzenia: Button.Click = "Button_Click". "
Ten problem wydaje się nie być w pełni opisane end-to-end w dowolnym miejscu: Link dostarczane powyżej nie pełne wyjaśnienie w jaki sposób zdefiniować, podnieść i haczyk zdarzenia z UserControl do okna nadrzędnego . Dla niektórych może być oczywiste, ale zabrało mi chwilę, aby połączyć kropki, więc podzielę się moimi odkryciami. Tak, sposobem na to jest użycie niestandardowego zestawu RoutedEvent do RoutingStrategy.Bubble, ale jest więcej do opowiadania.
W tym przykładzie mam UserControl o nazwie ServerConfigs, który ma przycisk Zapisz. Kiedy użytkownik kliknie przycisk Zapisz, chcę przycisk w oknie nadrzędnym, które zawiera przycisk UserControl, aby włączyć inny przycisk, przycisk nazywa się btn_synchronizuj.
Za pomocą kodu UserControl zdefiniuj poniższe, zgodnie z powyższym linkiem RoutedEvent.
public partial class ServerConfigs : UserControl
{
// Create RoutedEvent
// This creates a static property on the UserControl, SettingsConfirmedEvent, which
// will be used by the Window, or any control up the Visual Tree, that wants to
// handle the event. This is the Custom Routed Event for more info on the
// RegisterRoutedEvent method
// https://msdn.microsoft.com/en-us/library/ms597876(v=vs.100).aspx
public static readonly RoutedEvent SettingConfirmedEvent =
EventManager.RegisterRoutedEvent("SettingConfirmedEvent", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(ServerConfigs));
// Create RoutedEventHandler
// This adds the Custom Routed Event to the WPF Event System and allows it to be
// accessed as a property from within xaml if you so desire
public event RoutedEventHandler SettingConfirmed
{
add { AddHandler(SettingConfirmedEvent, value); }
remove { RemoveHandler(SettingConfirmedEvent, value); }
}
....
// When the Save button on the User Control is clicked, use RaiseEvent to fire the
// Custom Routed Event
private void btnSave_Click(object sender, RoutedEventArgs e)
{
....
// Raise the custom routed event, this fires the event from the UserControl
RaiseEvent(new RoutedEventArgs(ServerConfigs.SettingConfirmedEvent));
....
}
}
Istnieje przykład wdrożenia, w którym powyższy samouczek kończy się. Jak więc złapać zdarzenie w oknie i poradzić sobie z nim?
W ten sposób z window.xaml można użyć Custom RoutedEventHandler zdefiniowanego w formancie użytkownika. To jest dokładnie tak, jak button.click itp
<Window>
....
<uc1:ServerConfigs SettingConfirmed="Window_UserControl_SettingConfirmedEventHandlerMethod"
x:Name="ucServerConfigs" ></uc1:ServerConfigs>
...
</Window>
OR w kodzie za okno, można ustawić eventhandler poprzez AddHandler, zwykle w konstruktorze:
public Window()
{
InitializeComponent();
// Register the Bubble Event Handler
AddHandler(ServerConfigs.SettingConfirmedEvent,
new RoutedEventHandler(Window_UserControl_SettingConfirmedEventHandlerMethod));
}
private void Window_UserControl_SettingConfirmedEventHandlerMethod(object sender,
RoutedEventArgs e)
{
btn_synchronize.IsEnabled = true;
}
Ten artykuł jest wart czytania. –
Wreszcie można ustawić RoutedEvents na "kliknięcie" - ta odpowiedź obejmuje cały proces od początku do końca. Świetna sprawa. – nocarrier
- 1. wyzwalania zdarzenia kliknięcia w oknie nadrzędnym iframe
- 2. Wyświetl okno dialogowe jquery w oknie nadrzędnym
- 3. Ustaw zmienną w oknie nadrzędnym z iframe
- 4. Złożenie formularza strony za pomocą formantu WebBrowser w C#
- 5. Podnoszenie zdarzeń C# za pomocą metody rozszerzenia - czy to źle?
- 6. tranzytowej zdarzenia myszy do formantu nadrzędnego
- 7. wyłączyć zdarzenia dotykowe w oknie RecyclerView (aby zapobiec dotknięciom użytkownika)?
- 8. C#: Podnoszenie odziedziczony zdarzenie
- 9. Uzyskiwanie dostępu do niestandardowej strony wzorcowej za pomocą formantu użytkownika
- 10. Jak ustawić datacontext formantu użytkownika
- 11. ShowDialog() za oknem nadrzędnym
- 12. Wzór sygnatury zdarzenia w .net
- 13. Utwórz użytkownika Active Directory w .NET (C#)
- 14. Podnoszenie niestandardowych zdarzeń w C# WinForms
- 15. Jak symulować zdarzenia klawiatury i myszy za pomocą CGEventPost w oknie logowania systemu Mac OS?
- 16. Tworzenie zapytań generycznych w SQLite-net C# za pomocą SQLiteAsyncConnection
- 17. NET podnoszenie zdarzenie i NullObject wzór
- 18. Jak dynamicznie zmieniać szablon formantu WPF za pomocą pola wyboru?
- 19. jak zmienić użytkownika w selen z .net
- 20. Jak zmienić rozmiar formantu użytkownika w WPF w czasie wykonywania
- 21. Wymuszenie wyboru użytkownika w oknie dialogowym
- 22. Jak programowo zmienić ustawienia drukarki za pomocą formantu WebBrowser?
- 23. Jak uzyskać adres IP użytkownika za pomocą .net?
- 24. Tworzenie niestandardowego formantu TabPage w C#
- 25. Dodawanie edytorów w oknie dialogowym Visual Studio "Otwórz za pomocą ..."
- 26. C# Zaprojektowany nie rozpoznaje niestandardowego zdarzenia w niestandardowej kontroli użytkownika
- 27. Jaka jest najlepsza metoda znajdowania formantu ASP.Net za pomocą jQuery?
- 28. Zdarzenia asynchroniczne i .NET?
- 29. Kodowanie za pomocą HttpClient w .NET 4.5
- 30. Podnoszenie kręgosłupa.js Zobacz wydarzenie
Jako FYI, Piszę WPF aplikacja komputerowa, więc przykład propagacji zdarzenia kontrolnego użytkownika byłby doskonały. – user246392