2

DataTempleteリスト項目を表示するために以下を使用する WP7 のリストボックスがあります。

        <DataTemplate x:Key="MetaDataTemplate">
            <Grid Width="440" Margin="4,12,0,12">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="64"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu>
                        <toolkit:MenuItem Header="download" Visibility="{Binding DownloadVisible}" Command="{Binding Download}"/>
                        <toolkit:MenuItem Header="get link" Command="{Binding GetLink}"/>
                        <toolkit:MenuItem Header="delete" Command="{Binding Delete}"/>
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>                    
                <Image Height="64" Width="64" Source="{Binding Thumb}" Stretch="UniformToFill"  />
                <TextBlock Text="{Binding MetaData.Name, Mode=OneWay}" VerticalAlignment="Center" Margin="12,0,0,0" 
                           Style="{StaticResource MetaDataHeaderStyle}" Grid.Column="1" />
            </Grid>
        </DataTemplate>

コンテキスト メニュー データ テンプレートを定義すると、[戻る] ボタンを押してもメニューを閉じることができなくなります。誰もこの問題に直面しましたか? どのように解決しましたか?

インターネットで解決策を探しましたが、見つかりませんでした。どんな助けでも大歓迎です。

4

1 に答える 1

3

これを行う方法はContextMenu、コード ビハインドに変数を用意Openedし、テンプレートに ContextMenu のイベントのイベント ハンドラを用意することです。

<toolkit:ContextMenuService.ContextMenu>
                        <toolkit:ContextMenu Opened="ContextMenu_Opened">
                            <toolkit:MenuItem Header="stuff">

                            </toolkit:MenuItem>
                            <toolkit:MenuItem Header="more stuff">

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

イベント ハンドラーで、OpenedContextMenu 変数をそのインスタンス (送信者) に設定します。

private void ContextMenu_Opened(object sender, RoutedEventArgs e)
    {
        menu = sender as ContextMenu;
    }

最後に、OnBackKeyPress をオーバーライドして、変数が null ではなく、メニューが開いている場合は、メニューを閉じて back イベントをキャンセルします。

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        if (menu != null && menu.IsOpen)
        {
            menu.IsOpen = false;
            e.Cancel = true;
        }

        base.OnBackKeyPress(e);

    }

それはそれを行う必要があります!問題がある場合、または完全なコードを貼り付ける必要がある場合はお知らせください。

于 2012-05-17T02:09:50.700 に答える