2012-12-16 10 views
15

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?

+0

Czy użyłeś kodu źródłowego dla słownika zasobów kompozycji? –

+0

@voroninp: Tak; cf. akapit z instrukcją "Próbowałem używać pliku kodu źródłowego dla słownika zasobów." –

+0

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: –

Odpowiedz

2

Oznacza to, że jest skompilowany samodzielnie, bez kodu znajdującego się za lub w przestrzeni nazw.

Lub, mówiąc inaczej, nie ma fragmentu kodu do luźnego pliku XAML, może on być odczytywany z bazy danych jako tekst na przykład lub generowany w locie jako tekst i ładowany bez żadnego skodyfikowanego powiązania.

co do pogody jest to ważny powód, czy nie. To zależy od każdego programisty, ale to właśnie oznacza luźny xaml.

Edit:

W odpowiedzi na Twój komentarz, to sobie wyobrazić, że są specjalnie odnosi się do zasobów i style, ponieważ są to najczęściej „luźne pliki” iw ogóle większość ludzi nie z powrotem je z pliku z kodem . Osobiście postrzegam to jako radzenie sobie. Mogli łatwo dodać atrybut Loose = True i rozwiązać ten problem.

Realistycznie problemem nie jest ilość luźnych plików ani częstotliwość, z jaką są używane, ma to związek z tym, że przepis został stworzony w celu zrekompensowania brakującej funkcji. Byłoby znacznie łatwiej, gdyby po prostu powiedzieli, że nie możesz zrobić x, y, z, ponieważ nie zbudowaliśmy dla niego wsparcia, zamiast mówić, że jest to spowodowane pewną dowolną liczbą luźnych plików xaml.

+0

Przepraszamy, może to pytanie było niejasne - Wiem, co rozumie się przez * luźne XAML *. Moje pytanie dotyczy słowa * często *, co często * oznacza * w cytowanym kontekście? Innymi słowy, kiedy dokładnie? –

+0

Dodano więcej, TL; DR jest to wynoś się ... – McDonnellDean

Powiązane problemy