【问题标题】:How to hide context menu for particular list item in Windows Phone 8?如何隐藏 Windows Phone 8 中特定列表项的上下文菜单?
【发布时间】:2015-07-20 05:18:54
【问题描述】:

我目前正在使用 Windows Phone 8 开发一个应用程序。我在 xaml 中创建了一个列表框,并为该列表框中的所有项目添加了一个上下文菜单。现在我的要求是根据某些条件显示和隐藏上下文菜单。

我有一个 delete_flag 参数,如果 delete_flag 的值为 1,那么我想显示该项目的上下文菜单,否则如果它为 0,则隐藏 context_menu。

任何人都可以建议,是否可以为 Windows Phone 8 上下文菜单控件执行此操作?

我的 Listbox xaml 代码如下:

<ListBox x:Name="myListBox"
                 toolkit:TiltEffect.IsTiltEnabled="True"
                 HorizontalContentAlignment="Center"
                 ItemContainerStyle="{StaticResource GenericListBoxContainerStyle}"
                 SelectedItem="{Binding}"
                 SelectionChanged="myreportsListBox_SelectionChanged"
                 >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0,1,0,1"
                          Background="White">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Ellipse Grid.Column="0"
                                 Height="60" 
                                 Width="60"
                                 Margin="7">
                            <Ellipse.Fill>
                        <ImageBrush ImageSource="{Binding image, Converter={StaticResource Imageconverter}}"></ImageBrush>
                            </Ellipse.Fill>
                        </Ellipse>
                        <StackPanel Grid.Column="1"
                                    Margin="0,8,0,8">

                            <TextBlock Margin="2"
                                       Style="{StaticResource HeaderContentStyle}">
                                        <Run Text=""/>
                                        <Run Text="{Binding id}"/>
                                        <Run Text="-"/>
                                        <Run Text="{Binding name}"/>

                            </TextBlock>

                            <TextBlock Margin="2"
                                       Style="{StaticResource DescriptionContentStyle}">
                                       <Run Text=""/>
                                       <Run Text="{Binding date}"/>
                                       <Run Text="-"/>
                                       <Run Text="{Binding status}"/>

                            </TextBlock>
                        </StackPanel>
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu Name="servicerequestContextMenu"
                                                 IsZoomEnabled="False"
                                                 >


                                <toolkit:MenuItem Header="Delete"
                                                  Name="DeleteMenuBtn"
                                                  Click="DeleteMenuBtn_Click"
                                                  CommandParameter="{Binding}" />

                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

【问题讨论】:

    标签: c# xaml windows-phone-8 listbox contextmenu


    【解决方案1】:

    delete_flag 应该是 true 或 false,在我看来,你能做的最好的事情就是将它绑定到 IsEnabled 标签。

     <toolkit:MenuItem Header="Delete"
      IsEnabled="{Binding delete_flag}" 
      Name="DeleteMenuBtn"
      Click="DeleteMenuBtn_Click"
      CommandParameter="{Binding}" />
    

    在 cmets 之后编辑

    在项目模型中创建新属性

     public Visibility SetVisibility
        {
            get
            {
                return delete_flag == 1 ? Visibility.Visible:Visibility.Collapsed;
            }
    
        }
    ....
    <toolkit:MenuItem Header="Delete"
      Visibility="{Binding SetVisibility}" 
      Name="DeleteMenuBtn"
      Click="DeleteMenuBtn_Click"
      CommandParameter="{Binding}" />
    

    这很简单,但我认为它应该可以解决问题

    【讨论】:

    • delete_flag 的值在 json 中,json 是由服务器发送的,所以我无法更改为 true 或 false。
    • 那么你为什么不在项目模型中添加另一个属性
    • 是的,这些在一定程度上帮助了我,但是现在上下文菜单打开了,但用户无法单击删除按钮,但是 delete_flag=0 的上下文菜单是否可能没有打开?跨度>
    • 绝对,只要使用可见性标签
    • 谢谢,试一试。但这可能会导致我这边出现问题,因为我直接将所有数据存储在数据库中,如果我为此字段提及[JsonIgnore],那么它也会导致问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多