WP7 - установить кнопку Background и BorderBrush в дополнение к цвету переднего плана по клику - PullRequest
2 голосов
/ 03 февраля 2011

Здесь есть несколько вопросов, которые касаются настройки цвета фона кнопки при нажатии. Эти вопросы использовали это как решение:

<phone:PhoneApplicationPage ...>
    <phone:PhoneApplicationPage.Resources>
        <Style x:Key="ButtonStyle1" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid Background="Transparent">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal"/>
                                    <VisualState x:Name="MouseOver"/>
                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ColorAnimation Duration="0" To="Cyan" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Disabled">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}" Background="Black">
                                <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </phone:PhoneApplicationPage.Resources>

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Button Content="Button" Style="{StaticResource ButtonStyle1}"/>
    </Grid>
</phone:PhoneApplicationPage>

Я хочу использовать этот шаблон, чтобы также установить цвета BorderBrush и Foreground , но моя настройка XAML закончилась только плохими эффектами.

[Примечание: поведение таково, что когда я устанавливаю цвета в codebehind, они не вступают в силу, когда мое приложение запускается, потому что цвета переопределяются стилем.]

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

Если вы настраиваете XAML вручную - вы делаете это неправильно.

Не боритесь с дзен XAML, плывите по нему. Примите Expression Blend в свой рабочий процесс разработки для всего дизайна GUI или будьте готовы к неописуемым ужасам ручного редактирования XAML.

Специально для VisualStateManagerm ручное редактирование XAML не имеет абсолютно никакого смысла, так как он был разработан командой Silverlight, поэтому его можно оптимально использовать из Expression Blend.

Я настоятельно рекомендую вам потратить 30 минут на просмотр этих 4 "Как я?" VSM видео от Стива Уайта @ http://expression.microsoft.com/en-us/cc643423.aspx

Эти 4 видео очень помогли мне в первые дни работы над VSM, чтобы понять, как использовать VSM и как лучше сформулировать мою логику интерфейса в визуальных состояниях.

В Expression Blend получение цвета фона для изменения на Click так же просто, как:

  1. Перетащите новую кнопку в Expression Blend.
  2. Щелкните правой кнопкой мыши и выберите «Редактировать шаблон -> Редактировать копию».
  3. Выберите «нажатое» состояние VSM на панели «Состояния».
  4. Изменить цвет фона "ButtonBackground".
1 голос
/ 03 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...