Я хочу создать динамическое c контекстное меню на основе того, какой элемент я выбираю при щелчке правой кнопкой мыши. Я нашел некоторую информацию о динамическом c контекстном меню, но это не работает. Мне нужно другое контекстное меню на основе TaskType. И я хочу контролировать контекстное меню в xaml, а не в коде. Вот коды, которые я реализовал Как я могу это сделать?
XAML
<StackPanel>
<StackPanel.Resources>
<DataTemplate x:Key="myTaskTemplate">
<Border Name="border" BorderBrush="Aqua" BorderThickness="1"
Padding="5" Margin="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text=" Task Name:"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=TaskName}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text=" Description:"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Description}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text=" Priority:"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Priority}"/>
</Grid>
</Border>
</DataTemplate>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</StackPanel.Resources>
<StackPanel.ContextMenu>
<ContextMenu >
<ContextMenu.ItemContainerTemplateSelector>
<local:MyTemplateSelector>
<local:MyTemplateSelector.IsHomeTemplate>
<DataTemplate>
<MenuItem Header="Home"/>
</DataTemplate>
</local:MyTemplateSelector.IsHomeTemplate>
<local:MyTemplateSelector.IsWorkTemplate>
<DataTemplate>
<MenuItem Header="Work"/>
</DataTemplate>
</local:MyTemplateSelector.IsWorkTemplate>
</local:MyTemplateSelector>
</ContextMenu.ItemContainerTemplateSelector>
</ContextMenu>
</StackPanel.ContextMenu>
<ListBox Width="auto" Margin="10" ItemsSource="{Binding Tasks}"
ItemTemplate="{StaticResource myTaskTemplate}"
HorizontalContentAlignment="Stretch"
>
</ListBox>
Selector
public class MyTemplateSelector : ItemContainerTemplateSelector
{
public DataTemplate IsHomeTemplate
{
get;
set;
}
public DataTemplate IsWorkTemplate
{
get;
set;
}
public override DataTemplate SelectTemplate(object item, ItemsControl parentItemsControl)
{
Task temp = item as Task;
if (temp != null)
{
if (temp.taskType == TaskType.Home)
{
return IsHomeTemplate;
}
else
{
return IsWorkTemplate;
}
// And so on
}
else
{
return IsWorkTemplate;//return base.SelectTemplate(item, container);
}
}
}