Изменить фон в FullPode ListPicker в WP7? - PullRequest
2 голосов
/ 28 сентября 2011

Кто-нибудь знает, как легко изменить фон в FullMode ListPicker? Нужно ли устанавливать стиль, чтобы можно было это делать? Я пробовал это, но не могу найти правильное место для установки фона ... Если это стиль, который нужно использовать, где именно в этом стиле я могу установить фон? Любая помощь будет высоко ценится:)

Вот стандартный стиль для 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>

Ответы [ 2 ]

1 голос
/ 19 марта 2013

Мне было интересно то же самое.

Хотя прямого способа изменить цвет фона ListPicker нет, он следует вместе с цветом ресурса PhoneChromeBrush, и, таким образом, вы можете переопределить цвет всех тех, что в вашем приложении, для изменения цвет этого фона.

Например:

((SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]).Color = Colors.Cyan;
1 голос
/ 29 сентября 2011

Нет способа сделать это с помощью шаблонов.

Единственный способ сделать это - изменить источник управления.(Вам нужно изменить Style на TargetType="controls:ListPicker".)

В частности, вам нужно изменить содержимое FullModePopup.

...