Xaml 如何从样式设置ListPicker的主题

Xaml 如何从样式设置ListPicker的主题,xaml,windows-phone-7,windows-phone-8,listpicker,Xaml,Windows Phone 7,Windows Phone 8,Listpicker,我拥有WPToolkit中的ListPicker控件的以下默认样式 <Style TargetType="toolkit:ListPicker" x:Key="ListPickerStyle1"> <!--<Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/>--> <Setter Property="Foreground" Va

我拥有WPToolkit中的ListPicker控件的以下默认样式

<Style TargetType="toolkit:ListPicker" x:Key="ListPickerStyle1">
        <!--<Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/>-->
        <Setter Property="Foreground" Value="{StaticResource PhoneTextBoxForegroundBrush}"/>
        <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="Margin" Value="{StaticResource PhoneTouchTargetOverhang}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="toolkit:ListPicker">
                    <StackPanel>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="PickerStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="Expanded">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames 
                                        Storyboard.TargetName="Border" 
                                        Storyboard.TargetProperty="Background" 
                                        Duration="0">
                                            <DiscreteObjectKeyFrame 
                                            Value="{StaticResource PhoneTextBoxEditBackgroundColor}" 
                                            KeyTime="0"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames 
                                        Storyboard.TargetName="Border" 
                                        Storyboard.TargetProperty="BorderBrush" 
                                        Duration="0">
                                            <DiscreteObjectKeyFrame 
                                            Value="{StaticResource PhoneTextBoxEditBorderBrush}" 
                                            KeyTime="0"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <ContentControl 
                        Content="{TemplateBinding Header}" 
                        ContentTemplate="{TemplateBinding HeaderTemplate}" 
                        Foreground="{StaticResource PhoneSubtleBrush}" 
                        FontSize="{StaticResource PhoneFontSizeNormal}" 
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                        Margin="0 0 0 8"/>
                        <Grid>
                            <Border 
                            x:Name="Border" 
                            Background="{TemplateBinding Background}" 
                            BorderBrush="{TemplateBinding Background}" 
                            BorderThickness="2">
                                <Canvas x:Name="ItemsPresenterHost" MinHeight="46">
                                    <ItemsPresenter x:Name="ItemsPresenter">
                                        <ItemsPresenter.RenderTransform>
                                            <TranslateTransform x:Name="ItemsPresenterTranslateTransform"/>
                                        </ItemsPresenter.RenderTransform>
                                    </ItemsPresenter>
                                </Canvas>
                            </Border>
                            <!--<Popup x:Name="FullModePopup">
                                <Border Background="{StaticResource PhoneChromeBrush}">
                                    --><!-- Popup.Child should always be a Border --><!--
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition/>
                                        </Grid.RowDefinitions>
                                        <ContentControl 
                                        Grid.Row="0" 
                                        Content="{TemplateBinding FullModeHeader}" 
                                        Foreground="{StaticResource PhoneForegroundBrush}" 
                                        FontFamily="{StaticResource PhoneFontFamilySemiBold}" 
                                        FontSize="{StaticResource PhoneFontSizeMedium}" 
                                        HorizontalAlignment="Left" 
                                        Margin="24 12 0 0"/>
                                        <ListBox 
                                        x:Name="FullModeSelector" 
                                        Grid.Row="1" 
                                        ItemTemplate="{TemplateBinding ActualFullModeItemTemplate}" 
                                        FontSize="{TemplateBinding FontSize}" 
                                        Margin="{StaticResource PhoneMargin}">
                                            <ListBox.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <StackPanel/>
                                                    --><!-- Ensures all containers will be available during the Loaded event --><!--
                                                </ItemsPanelTemplate>
                                            </ListBox.ItemsPanel>
                                        </ListBox>
                                    </Grid>
                                </Border>
                            </Popup>-->
                        </Grid>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


但我希望能够根据是否处于
扩展状态添加具有特定颜色的边框。此外,背景需要与扩展状态下的PhoneBackgroundBrush匹配。当前使用此样式时,展开ListPicker时背景不会改变,并且无论是否展开ListPicker,都不会显示边框。如何更改此设置?

将模板应用于列表选择器

<toolkit:ListPicker Template="{StaticResource ListPickerControlTemplate1}">

其中ListPickerControlTemplate1是一个具有高亮显示的VisualState的控件模板,您可以在其中更改边框笔刷、背景颜色等。在本例中,我使用的是黄色背景

<ControlTemplate x:Key="ListPickerControlTemplate1" TargetType="toolkit:ListPicker">
    <StackPanel>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="PickerStates">
                <VisualState x:Name="Normal"/>
                <VisualState x:Name="Highlighted">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames
                          Storyboard.TargetName="UserControl"
                          Storyboard.TargetProperty="Foreground"
                          Duration="0">
                            <DiscreteObjectKeyFrame
                              Value="{StaticResource PhoneForegroundBrush}"
                              KeyTime="0"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames
                          Storyboard.TargetName="Border"
                          Storyboard.TargetProperty="Background"
                          Duration="0">
                            <DiscreteObjectKeyFrame
                              Value="{StaticResource PhoneBackgroundBrush}"
                              KeyTime="0"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames
                          Storyboard.TargetName="Border"
                          Storyboard.TargetProperty="BorderBrush"
                          Duration="0">
                            <DiscreteObjectKeyFrame
                              Value="Yellow"
                              KeyTime="0"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                ....
 ...........
</ControlTemplate>

....
...........

我从控件模板中删除了ContentControl和一些其他部分,因为它不太相关

谢谢你的回复。在你提交答案之前,我碰巧找到了我的风格,尽管由于某种原因,当手机主题为黑色时,我的边框前景是白色的,但当前项目的前景文本颜色也是黑色的,这使得它不可见?@Matthew当然,如果你将背景设置为黑色,确保正确更改文本的前景色,使其可见。我的最终目标是仅在展开时更改当前选定项的前景色和ListPicker的边框,然后在所有其他情况下显示默认值。因此,在本例中,在“亮”主题中,显示的边框和ListPicker项的前景较暗(这是好的),但在“暗”主题中,ListPicker的边框为白色,而项目的前景颜色为黑色(这是不好的)。