Есть два контекстных меню. Для открытия нужного контекстного меню щелкните правой кнопкой мыши. Если IsData равно true, откроется ContextMenu1; если IsData имеет значение false, откроется ContextMenu2. Проблема будет раскрыта в XAML.
В DataTemplate есть два статических контекстных меню. Как их использует одно контекстное меню? Этот блок полностью устанавливает контекстное меню шаблона. Который выбирается в зависимости от условий.
<DataTemplate x:Key="ContextMenuControlTemplate">
<DataTemplate.Resources>
<ContextMenu x:Key="ContextMenuSet">
<MenuItem>
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<Image Width="15" Height="15" Source="{DynamicResource img_icon}"/>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text=" Add item" />
</StackPanel>
</MenuItem.Header>
<MenuItem.Icon>
<RadioButton IsChecked="True"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Remove"></MenuItem>
</ContextMenu>
<ContextMenu x:Key="ContextMenuDel">
<MenuItem Header=" Del all"></MenuItem>
</ContextMenu>
</DataTemplate.Resources>
<ContextMenu x:Name="contextMenuForItems"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Data.IsData}" Value="true">
<Setter TargetName="contextMenuForItems" Property="ContextMenu" Value="{StaticResource ContextMenuSet}" />
</DataTrigger>
<DataTrigger Binding="{Binding Data.IsData}" Value="false">
<Setter TargetName="contextMenuForItems" Property="ContextMenu" Value="{StaticResource ContextMenuDel}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
А здесь блок пытается использовать наше установленное контекстное меню. Проблема именно в этом.
<DataTemplate>
<DockPanel>
<ContextMenu>
<DataTemplate>
<ContentControl Content="{Binding Data.IsData}"
ContentTemplate="{StaticResource ContextMenuControlTemplate}"
/>
</DataTemplate>
</ContextMenu>
</DockPanel>
</DataTemplate>