如何在全屏模式下更改Windows Phone Listpicker的背景颜色

时间:2012-05-09 16:31:05

标签: xaml windows-phone-7 background popup listpicker

此问题之前已被提出,但所提供的答案对我自己和其他人没有用。 listpicker的样式是由我无法获得Listpicker的背景来改变颜色(在这种情况下是黄色),尽管尝试了我能想到的每一个属性来改变它。代码有什么问题?


<Style TargetType="toolkit:ListPicker" x:Key="ListPickerStyle1">
    <!--<Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/>-->
    <!--<Setter Property="Background" Value="YellowGreen"/>-->
    <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="Yellow" KeyTime="0"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames   Storyboard.TargetName="Border" Storyboard.TargetProperty="BorderThickness"  Duration="0">
                                        <DiscreteObjectKeyFrame  Value="200" 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="Yellow" BorderBrush="{TemplateBinding Background}"  BorderThickness="2">-->
                        <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}">-->
                            <Border Background="Yellow" BorderThickness="200">
                                <!-- Popup.Child should always be a Border -->
                                <Grid Background="Yellow">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition/>
                                    </Grid.RowDefinitions>
                                    <ContentControl   Grid.Row="0" Content="{TemplateBinding FullModeHeader}" Background="Yellow" 
                                                          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}" Background="Yellow">
                                        <ListBox.ItemsPanel>
                                            <ItemsPanelTemplate>
                                                <StackPanel Background="Yellow"/>
                                                <!-- Ensures all containers will be available during the Loaded event -->
                                            </ItemsPanelTemplate>
                                        </ListBox.ItemsPanel>
                                    </ListBox>
                                </Grid>
                            </Border>
                        </Popup>
                    </Grid>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:0)

我这样做是通过创建一个代表ListPickerPage的接口,并改变Toolkit中的任何代码引用来代替使用接口(IListPickerPage)。

然后,我刚刚创建了一个新的PhoneApplicationPage,并复制了&amp;略微修改了源代码(xaml & xaml.cs),(我让它实现了IListPickerPage

using System.Collections;
using System.Windows;
using System.Windows.Controls;

namespace Microsoft.Phone.Controls
{
    public interface IListPickerPage
    {
        string HeaderText { get; set; }
        IList Items { get; }
        SelectionMode SelectionMode { get; set; }
        object SelectedItem { get; set; }
        IList SelectedItems { get; }
        DataTemplate FullModeItemTemplate { get; set; }
        bool IsOpen { get; set; }
    }
}

然后,当您想要使用它时,您只需指定自己的页面,方法是设置PickerPageUri

<toolkit:ListPicker x:Name="lpStr"
                    Grid.RowSpan="2"
                                    Width="1"
                                    Height="1"
                                    CacheMode="BitmapCache"
                                    ExpansionMode="FullScreenOnly"
                                    Foreground="Black"
                                    FullModeItemTemplate="{StaticResource ListPickerStringLargeTemplate}"
                                    IsHitTestVisible="False"
                                    Opacity="0"
                                    PickerPageUri="/Views/Globals/ToolkitPages/MyListPickerPage.xaml" />
            </Grid>

其余的只是自定义您自己的ListPickerPage xaml文件以满足您的要求。