Windows Phone中有一个名为文本菜单功能,它允许创建控件弹出菜单。
然而,如果菜单项列表中是相当大的,他们中的一些不适合在屏幕上。 下面简单的例子将展示这一点:
在XAML:
我们将使用工具包,因此增加
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>
成功? 不,因为你可以滚动这个列表,但不能选择的项目了。
我的问题,是如何解决的呢?
使用多点触控? (我不很了解)
也许,我需要一些属性添加到Scrolviewer?
任何其他的想法?
[更新]另外,发现的项目点击/点击处理器改变行为,如果添加的ScrollViewer。 通常情况下,当你点击的项目,在上下文菜单中关闭和处理方法执行。 随着ScrollViewer中,上下文菜单没有关闭,需要一个更水龙头手动关闭它。 为什么是这种情况发生?