将标头绑定到上下文菜单 - Windows Phone
本文关键字:菜单 Windows Phone 上下文 绑定 | 更新日期: 2023-09-27 17:56:41
我有一个列表框,对于每个列表框项,我需要根据其绑定到的数据显示一个上下文菜单项。这是我的列表框
<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>
长按时,上下文菜单本身不会出现!!
您可能
想要做的是:
<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 属性的值而有所不同 - 因此添加两个菜单项并绑定它们的可见性。在上述解决方案中,您将需要两个定义为 recourcesn 的布尔-可见度转换器。
请注意,根据我的经验,最好完全避免上下文菜单的ItemsSource。因为这样你必须定义数据模板,并将菜单项放在模板中。因此,数据模板的菜单项与另一个菜单项一起包装。仅使用 Tap 事件时,您可能不会注意到任何奇怪之处,但是当绑定到 Command 时,菜单项的行为将不按预期显示。
ContextMenu
不是用户控件VisualTree
的一部分,因此绑定不会开箱即用。
请在这篇文章中抢劫。这是解决此问题的一个很好且舒适的解决方法。