MSDN says on event setters:EventSetters w temacie ResourceDictionary
ustawiaczy zdarzeń nie może być stosowany w stylu, który jest zawarty w słowniku zasobów motyw. Dzieje się tak dlatego, że słownik zasobów kompozycji w czasie wykonywania jest często luźnym binarnym plikiem XAML (BAML) i nie ma zdefiniowanego zakresu, gdzie znajduje się towarzyszący kod, który określa, że procedury obsługi mogą istnieć.
Potwierdzają to the first answer to this SO question, który stanowi:
XAML zasobu nie może mieć kod związany z pliku, są one zwykle nazywane „luźny XAML”. Możesz o tym przeczytać w msdn na temat EventSetter.
Jednak nie rozumiem jeszcze ograniczeń ograniczeń zdarzeń. Próbowałem użyć pliku kodu do słownika zasobów. Przypisałem procedurę obsługi zdarzenia dla zdarzenia zawartego w szablonie zdefiniowanym w stylu we wspomnianym słowniku zasobów - i zadziałało.
Dodanie ustawiacza zdarzeń do stylu w tym samym słowniku zasobów powoduje natomiast wyjątek.
Czy trafiłem w specjalny przypadek, w którym zadziałało?
Czy ustawienie funkcji obsługi zdarzeń w szablonie zawsze działa, ale jeśli tak, to dlaczego nie mogę użyć narzędzia ustawiającego zdarzenia w stylu w tym samym słowniku zasobów?
Moje pytanie sprowadza się do:
Co dokładnie należy rozumieć pod stwierdzeniem MSDN, że zasób słownika tematem jest często luźne binarny XAML - jak często, w jakich dokładnie okolicznościach?
Czy użyłeś kodu źródłowego dla słownika zasobów kompozycji? –
@voroninp: Tak; cf. akapit z instrukcją "Próbowałem używać pliku kodu źródłowego dla słownika zasobów." –
ResourceDictionary może mieć funkcję codebehind.To podejście jest opisane w książce MacDonald's - Pro WPF w C# 2010. Myślę, że zdarzenia niepożądane w stylu są tylko zgodne z projektem, ale zgadzam się z tobą, że nie jest jasne, dlaczego: –