Изменить фон в FullMode ListPicker в WP7?

Кто-нибудь знает, как легко изменить фон в 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>

person kgrevehagen    schedule 28.09.2011    source источник


Ответы (2)


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

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

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

person Matt Lacey    schedule 29.09.2011
comment
Да, я знаю, что мне нужно изменить стиль, но где стиль? Я пытался установить фон повсюду, но я не могу понять, в каком месте он должен быть.. Я могу опубликовать стиль в 1-м посте, и, может быть, вы сможете указать мне, где я могу изменить фон? - person kgrevehagen; 29.09.2011

Я задавался этим вопросом.

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

Например:

((SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]).Color = Colors.Cyan;
person Nate Radebaugh    schedule 18.03.2013