Windows Phone には、コントロールのポップアップ メニューを作成できるContextMenuという機能があります。
ただし、メニュー項目のリストが非常に大きい場合、画面に収まらないものもあります。次の簡単な例は、ポイントを示しています。
xamlで:
Toolkit を使用するので、追加します。
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
次に例を示します。
<Button Content="Button 1" Height="72" HorizontalAlignment="Left" Margin="160,400,0,0" Name="button1" VerticalAlignment="Top" Width="160">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Action A" Name="miActionA1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action B" Name="miActionB1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action C" Name="miActionC1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action D" Name="miActionD1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action E" Name="miActionE1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action F" Name="miActionF1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</Button>
nullAction では何もしていません
private void nullAction(object sender, RoutedEventArgs e)
{
}
DesignHeight 値は、既定の WP7 ページの標準です。DesignHeight="768"
ご覧のとおり、「ボタン 1」コントロールを長押しすると、メニューが表示されますが、完全ではありません。一部のアイテムは表示されません。私の場合、このメニューをスクロール可能にすることが最善の決定でした。これは、 ScrollViewerを使用して実行できます。
そこで、Scrollviewer と StackPanel でメニュー項目をカバーします。
<Button Content="Button 1" Height="72" HorizontalAlignment="Left" Margin="160,400,0,0" Name="button1" VerticalAlignment="Top" Width="160">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<ScrollViewer>
<StackPanel>
<toolkit:MenuItem Header="Action A" Name="miActionA1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action B" Name="miActionB1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action C" Name="miActionC1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action D" Name="miActionD1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action E" Name="miActionE1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
<toolkit:MenuItem Header="Action F" Name="miActionF1" BorderBrush="Black" BorderThickness="1" Click="nullAction" />
</StackPanel>
</ScrollViewer>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</Button>
成功?いいえ、このリストはスクロールできますが、項目を選択することはできません。
私の質問は、それを修正する方法ですか?
マルチタッチを使用しますか?(私はそれについてあまり知りません)
おそらく、Scrollviewer にプロパティを追加する必要がありますか?
他のアイデアはありますか?
[更新]また、スクロールビューアーが追加された場合、アイテムのタップ/クリック ハンドラーの動作が変わることがわかりました。通常、アイテムをタップすると、コンテキスト メニューが閉じられ、ハンドラ メソッドが実行されます。scrollviewer では、コンテキスト メニューが閉じず、手動で閉じるにはもう 1 回タップする必要があります。なぜそれが起こっているのですか?