【问题标题】:How do I set the selected colour for ListPicker item如何设置 ListPicker 项目的选定颜色
【发布时间】:2011-11-27 13:28:55
【问题描述】:

当前 ListPicker 中的选定项目被设置为手机强调色,如何使用自定义颜色覆盖它?

我知道这将通过一种风格来完成,但我不确定这应该是什么......

【问题讨论】:

    标签: xaml windows-phone-7 windows-phone-7.1 listpicker


    【解决方案1】:

    这取决于ListPicker.ExpansionMode。如果是ExpansionAllowed - 你的风格应该是这样的:

    <Style TargetType="toolkit:ListPickerItem">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="Padding" Value="8 6"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="toolkit:ListPickerItem">
                    <Grid x:Name="grid" Background="{TemplateBinding Background}">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames
                                            Storyboard.TargetName="ContentContainer"
                                            Storyboard.TargetProperty="Foreground"
                                            Duration="0">
                                            <DiscreteObjectKeyFrame  KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <!-- Normal color -->
                                                    <SolidColorBrush Color="Black"/>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames
                                            Storyboard.TargetName="ContentContainer"
                                            Storyboard.TargetProperty="Foreground"
                                            Duration="0">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <!-- Selected color -->
                                                    <SolidColorBrush Color="Orange"/>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <!-- Optionally - background selected color -->
                                        <!--<ObjectAnimationUsingKeyFrames
                                            Storyboard.TargetName="grid"
                                            Storyboard.TargetProperty="Background"
                                            Duration="0">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <SolidColorBrush Color="Gray"/>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>-->
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <ContentControl
                            x:Name="ContentContainer"
                            Content="{TemplateBinding Content}"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            Foreground="{TemplateBinding Foreground}"
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                            Margin="{TemplateBinding Padding}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    但是,如果是 FullScreenOnly - 唯一的方法是修改工具包源代码并使用所需的更改构建它。在我看来,这不值得。

    【讨论】:

    • 谢谢,但我如何将其设置为 ListPicker 的样式属性
    • 如果你想将它应用到页面上的所有 ListPicker 元素 - 将它放在页面资源中,如下所示:&lt;phone:PhoneApplicationPage&gt;&lt;phone:PhoneApplicationPage.Resources&gt;%YOUR_STYLE%&lt;/phone:PhoneApplicationPage.Resources&gt;&lt;/phone:PhoneApplicationPage&gt;
    • 我在完全干净的页面上试了一下,一切正常。我在某处读到过,我不记得具体在哪里,工具包版本中存在一些模板差异,尤其是Padding。首先,尝试 10 而不是 6。如果这没有帮助 - 你有最新的工具包,November?另一个原因可能是自定义 ItemTemplate,如果你有的话,试试不带它。
    • 感谢您的帮助,但由于第三方依赖,不得不使用 2011 年 2 月版的工具包,我还阅读了有关填充问题的信息,看来我将放弃尝试更改它跨度>
    • 好吧,如果这对您的设计完整性很重要 - 您始终可以通过所有必要的更改重新构建 2011 年 2 月的工具包。在这种情况下,硬编码就可以了。
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2011-10-26
    • 2015-10-06
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多