Dynami c Создание ContextMenu - PullRequest
0 голосов
/ 27 мая 2020

Я хочу создать динамическое 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...