To wydaje się być dość popularny temat, ale ...Jak uzyskać dostęp do formantu z menu kontekstowego Menu kontekstowe za pomocą drzewa wizualnego?
Mam następujące XAML:
<internal:MyCommandObject x:Name="CommandModel"/>
<Button DockPanel.Dock="Bottom" Command="{Binding DoAction, ElementName=CommandModel}">
<Button.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}">
<MenuItem Command="{Binding DoAction, ElementName=CommandModel}"/>
</ContextMenu>
</Button.ContextMenu>
Click Me
</Button>
Teraz MyCommandObject
jest kontrola, która naraża dynamicznych poleceń z jego DataContext
. Wiesz, co będzie dalej. :)
Zasadniczo polecenie przycisku działa idealnie - po jego kliknięciu polecenie DoAction
na MyCommandObject
zostaje wykonane perfekcyjnie. Jednak polecenie w menuitem nie zostanie wykonane. Próbowałem różnych sztuczek, takich jak ustawienie menu kontekstowego datacontext
na placementTarget
, aby mógł przechodzić przez wizualne drzewo kontrolek i tak dalej, ale nic nie robi.
Jakie konkretne ustawienia run RelativeSource
i CommandTarget
są potrzebne, aby to zadziałało?
Dzięki za to. Próbuję nie używać kodu z tyłu, jeśli to możliwe - czy możliwe jest zdefiniowanie NameScope w XAML? Niestety, nie mogę ustawić kontekstu danych pozycji menu jako przycisku, który eksponuje polecenie. Jest to menu kontekstowe dla siatki i potrzebuję DataContext dla wybranego elementu, aby można było przekazywać właściwości z tego jako parametry do polecenia. – Webreaper
Powodem nieużywania kodu jest to, że xaml nie jest skompilowany - wszystko odbywa się w kliencie w czasie wykonywania z opóźnionym wiązaniem. – Webreaper
@Webreaper Nie masz pewności, czy mówisz o swoim scenariuszu, czy w ogóle, ale głównie pliki XAML są kompilowane w BAML w czasie kompilacji (patrząc na twoje xaml, które również wygląda na to); Proponuję ci odesłać te linki - [Compiled XAML = BAML not IL] (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML-\_3D00\_ -BAML-not-IL.aspx) i [B jest dla ... BAML] (http://blogs.msdn.com/b/jimoneil/archive/2009/01/12/b-is-for-baml.aspx) – akjoshi