2

任何人都知道如何輕鬆更改ListPicker的FullMode中的背景?我是否需要設置一種風格才能做到這一點?我已經嘗試過了,但是找不到設置背景的正確位置......如果它是需要使用的樣式,那麼我可以在哪種樣式中設置背景?任何幫助,將不勝感激:)更改WP7中ListPicker FullMode的背景?

下面是ListPicker標準樣式:

<Style TargetType="toolkit:ListPicker"> 
    <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> 

回答

1

有沒有辦法通過模板來做到這一點。

要做到這一點的唯一方法是通過更改控件的來源。 (您需要將Style更改爲TargetType="controls:ListPicker"。)

具體來說,您需要更改FullModePopup的內容。

+1

是的,我知道我需要改變風格,但其中的風格?我試圖在任何地方設置背景,但我似乎無法找到背景應該放在什麼位置。我可以在第一篇文章中發佈這種風格,也許您可​​以指出我可以在哪裏更改背景? – kgrevehagen

1

我在想這件事。

雖然沒有直接改變ListPicker的背景顏色的方式,但它與PhoneChromeBrush資源的顏色跟着一起,從而可以覆蓋所有在您的應用程序的顏色來改變顏色這個背景。

例如:

((SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]).Color = Colors.Cyan;