Menu nie działa, gdy wystaje poza TaskPane

0

Problemów z DataContext ciąg dalszy... Część pierwsza tutaj: link
Mój xaml:

<ContextMenu>
	<MenuItem Header="TEST 1" 		
			ItemsSource="{Binding Data.Thesises, Source={StaticResource proxy}}" 
			AlternationCount="{Binding Data.Thesises.Count, Source={StaticResource proxy}}"
			HeaderTemplate="{x:Null}">

		<MenuItem.Resources>
			<Style TargetType="{x:Type MenuItem}">
				<Setter Property="HeaderTemplate">
					<Setter.Value>
						<DataTemplate>
							<TextBlock>
								<TextBlock.Text>
									<MultiBinding StringFormat="{}{0}: {1}">
										<Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}" />
										<Binding Path="Data.Thesises.Count" Source="{StaticResource proxy}"/>
									</MultiBinding>
								</TextBlock.Text>
							</TextBlock>
						</DataTemplate>
					</Setter.Value>
				</Setter>
				<Setter Property="Command" Value="{Binding DataContext.InsertTextCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />
			</Style>
		</MenuItem.Resources>
	</MenuItem>
	<MenuItem
			Header="TEST 2" 
			Command="{Binding InsertTextCommand}" />
</ContextMenu>

Chciałabym, żeby elementy submenu utworzonego w MenuItem "TEST 1" wywoływały metodę InsertTextCommand. Niestety gdy klikam, to nic się nie dzieje. W okienku Output nie widzę żadnych komunikatów o problemach z binding, choć wcześniej tam były ;)

Gdy klikam na MenuItem "TEST 2" to komenda jest wywoływana.

Gdy podglądam w Live Visual Tree, to MenuItem "TEST 1" ma DataContext prawidłowy - tj. ustawiony na ViewModel. W Items tego MenuItem wyświetla się lista Thesises i elementy nie mają DataContext, tylko właściwości klasy Thesis.

datacontext.png

Nie wiem, jak to rozumieć. Thesis nie ma też Headera, a jednak to się udaje ustawić... Może problem jest w czym innym, niż błędny DataContext?

0

Zrobiłam jeszcze jeden test:

<MenuItem
		Header="TEST 3"
		Visibility="Visible">
	<MenuItem Header="TEST" Command="{Binding InsertTextCommand}" />
	<MenuItem Header="TEST" Command="{Binding InsertTextCommand}" />
	<MenuItem Header="TEST" Command="{Binding InsertTextCommand}" />
</MenuItem>

I te komendy też się nie wywołują! Live Visual Tree pokazuje na nich prawidłowe DataContexty i prawidłowo zbindowane Command... Czemu więc nic się nie dzieje, gdy klikam...?

0

O mamuniu, co tu się dzieje o.O
To trzeba obrazkowo pokazać, bo słowami tego nie ogarnę:
customtaskpane1.png
customtaskpane2.png

Zaczynam się zastanawiać, czy w ogóle powinnam używać ContextMenu...

0

Ponoć to jest rozwiązanie: https://blogs.msdn.microsoft.com/vsod/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui-for-wpf-context-menus/
Teraz jeszcze tylko rozkminić, jak to zaimplementować w sytuacji, gdy mam dynamiczną kolekcję elementów, z których każdy ma ContextMenu -_-'
Może trzeba było oprzeć menu na buttonach... Nie kocham WPF, oj nie :(

0

Zaimplementowałam rozwiązanie z DispatcherFrame i niestety do bani to jest. Komendy z ContextMenu działają, ale po pierwsze całe menu zamula, a po drugie - blokuje to dalszą edycję dokumentu :O
Czy ktokolwiek ma jakieś inne pomysły? Albo może jakieś sugestie, czemu DispatcherFrame nie zadziałał tak jak powinien?

0

Jakby ktoś jeszcze był zainteresowany, to w rozwiązaniu z DispatcherFrame (https://blogs.msdn.microsoft.com/vsod/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui-for-wpf-context-menus/) trzeba usunąć ify, a oprócz tego dodać obsługę eventu Click w naszym ContextMenu, która będzie robić:

Dispatcher.ExitAllFrames();

1 użytkowników online, w tym zalogowanych: 0, gości: 1