Obsługa zdarzeń Visual Basic oraz WPF
W przypadku języka .NET języka Microsoft Visual Basic możesz użyć słowa kluczowego specyficznego dla Handles
języka, aby skojarzyć programy obsługi zdarzeń z wystąpieniami, zamiast dołączać programy obsługi zdarzeń z atrybutami lub przy użyciu AddHandler metody . Handles
Jednak technika dołączania programów obsługi do wystąpień ma pewne ograniczenia, ponieważ składnia Handles
nie może obsługiwać niektórych specyficznych funkcji zdarzeń kierowanych w systemie zdarzeń WPF.
Używanie "dojść" w aplikacji WPF
Programy obsługi zdarzeń połączone z wystąpieniami i zdarzeniami Handles
muszą być zdefiniowane w częściowej deklaracji klasy wystąpienia, co jest również wymaganiem dla programów obsługi zdarzeń przypisanych za pomocą wartości atrybutów w elementach. Można określić Handles
tylko dla elementu na stronie, który ma Name wartość właściwości (lub x:Name Dyrektywa zadeklarowana). Jest to spowodowane tym, że element Name w języku XAML tworzy odwołanie do wystąpienia, które jest niezbędne do obsługi formatu odwołania Instance.Event wymaganego przez składnię Handles
. Jedynym elementem, który może być używany bez Handles
odwołania, jest wystąpienie elementu root, które definiuje klasę Name częściową.
Tę samą procedurę obsługi można przypisać do wielu elementów, oddzielając odwołania Instance.Event po przecinkami Handles
.
Można użyć Handles
polecenia , aby przypisać więcej niż jedną procedurę obsługi do tego samego odwołania Instance.Event. Nie przypisuj żadnej ważności do kolejności, w której programy obsługi są podane w Handles
odwołaniu. Należy założyć, że programy obsługi obsługujące to samo zdarzenie mogą być wywoływane w dowolnej kolejności.
Aby usunąć procedurę obsługi, która została dodana Handles
w deklaracji , możesz wywołać metodę RemoveHandler.
Można użyć Handles
do dołączania programów obsługi dla zdarzeń kierowanych, o ile dołączasz programy obsługi do wystąpień, które definiują zdarzenie obsługiwane w tabelach elementów członkowskich. W przypadku zdarzeń kierowanych programy obsługi dołączone za pomocą Handles
tych samych reguł routingu co programy obsługi dołączone jako atrybuty XAML lub ze wspólnym podpisem AddHandler. Oznacza to, że jeśli zdarzenie jest już oznaczone ( Handled właściwość w danych zdarzenia to True
), programy obsługi dołączone Handles
do elementu nie są wywoływane w odpowiedzi na to wystąpienie zdarzenia. Zdarzenie może być oznaczone przez programy obsługi wystąpień w innym elemencie trasy lub przez obsługę klas w bieżącym elemencie lub wcześniejszych elementach wzdłuż trasy. W przypadku zdarzeń wejściowych, które obsługują sparowane zdarzenia tunelu/bąbelka, trasa tunelowania mogła oznaczyć obsłużoną parę zdarzeń. Aby uzyskać więcej informacji na temat zdarzeń kierowanych, zobacz Routed Events Overview (Przegląd zdarzeń trasowanych).
Ograniczenia dotyczące "dojść" do dodawania programów obsługi
Handles
program nie może odwoływać się do programów obsługi dołączonych zdarzeń. Należy użyć add
metody dostępu dla tego dołączonego zdarzenia lub atrybutów zdarzenia typename.eventname w języku XAML. Aby uzyskać szczegółowe informacje, zobacz Omówienie zdarzeń trasowanych.
W przypadku zdarzeń kierowanych można użyć Handles
tylko do przypisywania programów obsługi dla wystąpień, w których to zdarzenie istnieje w tabeli składowych wystąpień. Jednak w przypadku zdarzeń kierowanych ogólnie element nadrzędny może być odbiornikiem zdarzenia z elementów podrzędnych, nawet jeśli element nadrzędny nie ma tego zdarzenia w tabeli elementów członkowskich. W składni atrybutu można to określić za pomocą formularza atrybutu typename.membername , który kwalifikuje typ faktycznie definiuje zdarzenie, które chcesz obsłużyć. Na przykład element nadrzędny Page
(bez Click
zdefiniowanego zdarzenia) może nasłuchiwać zdarzeń kliknięcia przycisku, przypisując program obsługi atrybutów w formularzu Button.Click
. Nie obsługuje jednak Handles
formularza typename.membername, ponieważ musi obsługiwać formularz Instance.Event powodujący konflikt. Aby uzyskać szczegółowe informacje, zobacz Omówienie zdarzeń trasowanych.
Handles
Program nie może dołączyć programów obsługi wywoływanych dla zdarzeń, które są już oznaczone jako obsługiwane. Zamiast tego należy użyć kodu i wywołać handledEventsToo
przeciążenie elementu AddHandler(RoutedEvent, Delegate, Boolean).
Uwaga
Nie używaj Handles
składni w kodzie Visual Basic podczas określania programu obsługi zdarzeń dla tego samego zdarzenia w języku XAML. W takim przypadku program obsługi zdarzeń jest wywoływany dwukrotnie.
Jak WPF implementuje funkcję "handles"
Po skompilowaniu strony Extensible Application Markup Language (XAML) plik pośredni deklaruje Friend
WithEvents
odwołania do każdego elementu na stronie, który ma Name zestaw właściwości (lub x:Name Dyrektywa zadeklarowana). Każde nazwane wystąpienie jest potencjalnie elementem, który można przypisać do programu obsługi za pośrednictwem programu Handles
.
Uwaga
W programie Visual Studio funkcja IntelliSense może wyświetlać uzupełnianie elementów dostępnych dla Handles
odwołania na stronie. Może to jednak zająć jedno przekazanie kompilacji, aby plik pośredni mógł wypełnić wszystkie Friends
odwołania.
Zobacz też
.NET Desktop feedback