在哪里可以找到列表中可点击项目使用的Windows Phone按钮样式?

时间:2014-02-06 23:17:33

标签: c# wpf xaml windows-phone-8

在内置的Windows Phone应用程序中,列表中的可单击项(StackPanel或LongListSelector)通常具有以下行为:

  1. 点击/点击并按住该项目时缩小。
  2. 当点击/点击并按住1秒钟时,会弹出一个上下文菜单。
  3. 如果指针在按住时移动了一定量的像素,则中止点击操作。
  4. 在所有应用视图(您向左侧滑动主屏幕时可以看到的屏幕)中轻松观察到该行为。因为2. + 3。已经按下了按钮,并且1.按下按钮时收缩所有内容的Style很容易实现,我很确定列表中的项目使用样式按钮作为项目模板 - 使用样式与默认的按钮样式不同。

    我在哪里找到那个风格?

2 个答案:

答案 0 :(得分:1)

您可以从以下给定链接下载演示应用程序:

倾斜效果的链接 here
上下文菜单的链接 here

答案 1 :(得分:1)

根据普拉迪普的回答,我可以解决这个问题。可点击的项目不是Button,尽管也可以实现与按钮样式相同的行为(请参阅本答案的底部)。缩放时的收缩效果实际上是一种倾斜拍摄效果,如果项目在左侧或右侧而不是中间轻敲,则细节观察者可以看到该效果。

如果LongListSelector启用了倾斜效果,则倾斜适用于各个LongListSelector项目。 TiltEffect是附属财产。要使用它,项目必须引用nuget上可用的Microsoft WPtoolkit

我在下面添加了代码,其中显示了如何在TiltEffect中使用ContextMenuLongListSelector。要对LongListSelector中的商品点击做出反应,请参阅LongListSelector: Item tap?

<phone:PhoneApplicationPage
    x:Class="Test.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit">
    <Grid x:Name="LayoutRoot">
        <phone:LongListSelector ItemsSource="{Binding Items}" toolkit:TiltEffect.IsTiltEnabled="True">
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding}" Style="{StaticResource PhoneTextLargeStyle}"/>
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu>
                                <toolkit:MenuItem Header="delete"/>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                    </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>
    </Grid>
</phone:PhoneApplicationPage>

或者,看起来和行为相同的按钮样式可以用相同的附加属性实现,或多或少*像这样:

<Style x:Key="ListButton" TargetType="Button">
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyLight}" />
    <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeLarge}" />
    <!-- Transparent background is necessary to be part of hitbox. transparent background and null background behave differently -->
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Padding" Value="0" />
    <Setter Property="toolkit:TiltEffect.IsTiltEnabled" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                            BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}">
                    <ContentPresenter Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}" 
                               HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

*此样式很少,并且不会处理所有情况(例如禁用/启用)。