Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WP7 xaml中共享上下文菜单_Xaml_Windows Phone 7 - Fatal编程技术网

在WP7 xaml中共享上下文菜单

在WP7 xaml中共享上下文菜单,xaml,windows-phone-7,Xaml,Windows Phone 7,我想向列表框中的项目添加上下文菜单。通常,答案是将contextmenu添加到项目模板的根目录中。但是,我使用的是一个模板选择器,因此有多个模板在使用,具体取决于列表框中每个项目的数据。这意味着我需要向每个模板添加相同的contextmenu定义,这不是很吸引人 一种解决方案是将datatemplate包装在ContentControl中,这将为上下文菜单定义提供一个单独的位置。然而,我相信这会增加不必要的布局开销 我尝试的另一个解决方案是将ContextMenu添加到资源字典中,但我相信这最终

我想向列表框中的项目添加上下文菜单。通常,答案是将contextmenu添加到项目模板的根目录中。但是,我使用的是一个模板选择器,因此有多个模板在使用,具体取决于列表框中每个项目的数据。这意味着我需要向每个模板添加相同的contextmenu定义,这不是很吸引人

一种解决方案是将datatemplate包装在ContentControl中,这将为上下文菜单定义提供一个单独的位置。然而,我相信这会增加不必要的布局开销

我尝试的另一个解决方案是将ContextMenu添加到资源字典中,但我相信这最终会在所有使用中共享同一个对象实例,并且由于ContextMenu的实现方式,这也不起作用

第三种解决方案是使用
Loaded
事件调用适当填充上下文菜单的函数。然而,这最终会将大量本应在XAML中的代码移动到代码中,并且看起来相当难看。如果有某种方法在xaml中定义上下文菜单,然后从代码中引用它,我会觉得它很吸引人,但我不太明白如何做到这一点

在模板选择器中跨模板共享同一ContextMenu的正确方法是什么


这是ContentControl方法,它可以工作,但最终会向每个项添加两个内容控件:

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <ContentControl>
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu Loaded="ContextMenu_Loaded">
                                <toolkit:MenuItem Header="Delete"/>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                        <ContentControl ContentTemplate="{StaticResource MyTemplate}" Content="{Binding}"/>
                    </ContentControl>
                </DataTemplate>
            </ListBox.ItemTemplate>

如何将ContextMenu添加到TemplateSelector

<ListBox ItemsSource="{Binding}">
    <ListBox.Resources>
        <DataTemplate x:Key="MyTemplate">
            <StackPanel>
                <TextBlock Text="{Binding}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.Resources>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <local:CustomTemplateSelector Content="{Binding}">
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu>
                        <toolkit:MenuItem Header="Delete"
                                            Click="MenuItem_Click" />
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>
                <local:CustomTemplateSelector.TemplateOne>
                    <DataTemplate>
                        <ContentControl Content="{Binding}"
                                        ContentTemplate="{StaticResource MyTemplate}"
                                        Foreground="Blue" />
                    </DataTemplate>
                </local:CustomTemplateSelector.TemplateOne>
                <local:CustomTemplateSelector.TemplateTwo>
                    <DataTemplate>
                        <ContentControl Content="{Binding}"
                                        ContentTemplate="{StaticResource MyTemplate}"
                                        Foreground="Red" />
                    </DataTemplate>
                </local:CustomTemplateSelector.TemplateTwo>
                <local:CustomTemplateSelector.TemplateThree>
                    <DataTemplate>
                        <ContentControl Content="{Binding}"
                                        ContentTemplate="{StaticResource MyTemplate}"
                                        Foreground="Yellow" />
                    </DataTemplate>
                </local:CustomTemplateSelector.TemplateThree>
            </local:CustomTemplateSelector>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


我运行了这个,它对我很有效-试试看,让我知道这是否是您想要的效果。

将ContextMenu添加到TemplateSelector如何

<ListBox ItemsSource="{Binding}">
    <ListBox.Resources>
        <DataTemplate x:Key="MyTemplate">
            <StackPanel>
                <TextBlock Text="{Binding}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.Resources>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <local:CustomTemplateSelector Content="{Binding}">
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu>
                        <toolkit:MenuItem Header="Delete"
                                            Click="MenuItem_Click" />
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>
                <local:CustomTemplateSelector.TemplateOne>
                    <DataTemplate>
                        <ContentControl Content="{Binding}"
                                        ContentTemplate="{StaticResource MyTemplate}"
                                        Foreground="Blue" />
                    </DataTemplate>
                </local:CustomTemplateSelector.TemplateOne>
                <local:CustomTemplateSelector.TemplateTwo>
                    <DataTemplate>
                        <ContentControl Content="{Binding}"
                                        ContentTemplate="{StaticResource MyTemplate}"
                                        Foreground="Red" />
                    </DataTemplate>
                </local:CustomTemplateSelector.TemplateTwo>
                <local:CustomTemplateSelector.TemplateThree>
                    <DataTemplate>
                        <ContentControl Content="{Binding}"
                                        ContentTemplate="{StaticResource MyTemplate}"
                                        Foreground="Yellow" />
                    </DataTemplate>
                </local:CustomTemplateSelector.TemplateThree>
            </local:CustomTemplateSelector>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


我运行了这个程序,它对我很有效-尝试一下,让我知道这是否是您想要的效果。

正是我所需要的。谢谢你的帮助,正是我需要的。谢谢你的帮助。