繁体   English   中英

将标题绑定到上下文菜单-Windows Phone

[英]Binding a header to context menu- windows phone

我有一个列表框,对于每个列表框项,我需要根据绑定到的数据显示一个上下文菜单项。 这是我的列表框

<ListBox x:Name="pdflist" ItemsSource="{Binding}" Margin="18,0,7,0" SelectionChanged="pdflist_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <toolkit:ContextMenuService.ContextMenu>
                                <toolkit:ContextMenu x:Name="mymenu" ItemsSource={Binding}>
                                    <toolkit:ContextMenu.ItemTemplate>
                                        <DataTemplate>
                                            <toolkit:MenuItem Header="{Binding isFavorite}" Click="favorite_Click" />
                                        </DataTemplate>
                                    </toolkit:ContextMenu.ItemTemplate>
                                </toolkit:ContextMenu>
                            </toolkit:ContextMenuService.ContextMenu>
                            <Grid Width="420">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="30"></ColumnDefinition>
                                    <ColumnDefinition Width="350"></ColumnDefinition>
                                    <ColumnDefinition Width="60"></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                <Image VerticalAlignment="Top" Margin="0,20,0,0" Height="20"  Width="25" Source="/Assets/PDF.png" Grid.Column="0" Stretch="None" >
                                    </Image>
                                <TextBlock TextWrapping="Wrap" Grid.Column="1" Foreground="Black" FontSize="30" Text="{Binding name}"></TextBlock>
                                <Image Height="20" Width="25" Grid.Column="2" Source="{Binding isFavorite,Converter={StaticResource typeconvert}}"></Image>
                            </Grid>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

绑定到列表框的数据具有模型

 public class resources
    {
        public string name
        {
            get;
            set;

        }
        public bool isRead { get; set; }
        public bool isFavorite { get; set; }

    }

运行代码时,无法在上下文菜单中查看任何菜单项。

我已经试过了

<ItemsControl ItemsSource="{Binding isFavorite}" Tag="{Binding ElementName=pdflist, Path=DataContext}">
                                <toolkit:ContextMenuService.ContextMenu>
                                    <toolkit:ContextMenu>
                                            <toolkit:MenuItem Header="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"  Click="favorite_Click"/>

                                    </toolkit:ContextMenu>
                                </toolkit:ContextMenuService.ContextMenu>
                                </ItemsControl>

长按时,上下文菜单本身不会出现!

ContextMenu不是您的UserControl的VisualTree的一部分,因此Binding不能直接使用。

请在这个职位上抢劫。 对于此问题,这是一种不错的解决方法。

您可能想做的是:

<DataTemplate>
    <StackPanel>
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu>
                <toolkit:MenuItem Header="add to favourites" Visibility="{Binding isFavorite, Converter={StaticResource BoolToVisibility}}" Tap="HandleFavouriteTap"/>
                <toolkit:MenuItem Header="remove from favourites" Visibility="{Binding isFavorite, Converter={StaticResource BoolToCollapsed}}" Tap="HandleFavouriteTap"/>
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>
        <Grid Width="420">
            ...
        </Grid>
    </StackPanel>
</DataTemplate>

您不应使用ItemsSource属性,因为在视图模型(资源类)上没有IEnumerable属性,该属性可用作可用命令的列表。 您只需要一个命令,但是根据isFavorite属性的值而有所不同-因此添加两个MenuItem并绑定它们的可见性。 在上述解决方案中,您将需要将两个bool-to-bilibilisity转换器定义为recounces。

请注意,以我的经验,最好完全避免使用ContextMenu的ItemsSource。 因为那样,您必须定义DataTemplate并将MenuItem放置在模板中。 结果,DataTemplate的MenuItem被另一个MenuItem包装。 当仅使用Tap事件时,您可能不会注意到任何奇怪的情况,但是当绑定到Command时,MenuItems的行为将不会达到预期的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM