2012-05-09 137 views
1

此問題之前已被問到,但提供的答案對我自己和其他人無效。 listpicker的風格是由我提供的,我無法獲得Listpicker的背景來改變顏色(在這個例子中是黃色),儘管我嘗試了所有我能想到的屬性來改變它。代碼有什麼問題?如何在全屏模式下更改Windows Phone 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> 
+0

您是否設法解決這個問題? – Subby

回答

0

我通過創建界面來表示ListPickerPage,並在工具包中使用的接口(IListPickerPage)而不是改變的任何代碼的引用這樣做。

然後,我剛剛創建了一個新的PhoneApplicationPage,並複製&稍微修改源(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文件,以滿足您的需求。

+2

這將如何更改彈出窗口的背景顏色?我只看到Foreground的引用? – user640142

+0

您必須從工具包的源代碼中取得XAML文件,並根據需要對其進行修改。你用PickerPageUri來引用它。我有目的地沒有把它放在這裏,它將來會過時 –

相關問題