Шаблонный фон кнопки - PullRequest
       11

Шаблонный фон кнопки

0 голосов
/ 29 июля 2011

У меня есть пользовательская кнопка, как показано ниже, и я хочу изменить цвет текста и источник изображения в нажатом состоянии.

<Button Background="#FFC17C7C" Style="{StaticResource CustomButton}">
    <StackPanel HorizontalAlignment="Center" 
                VerticalAlignment="Center" Orientation="Horizontal">
        <TextBlock VerticalAlignment="Center" Text="hello" />
        <Image Source="Background.png" />
    </StackPanel>
</Button>

Если вы можете предоставить мне простой пример или полезные ссылки для решения такого рода проблем, я был бы благодарен.

1 Ответ

0 голосов
/ 29 июля 2011

Прежде всего, вы не можете изменить источник содержимого Button таким образом. Вам нужно переопределить шаблон кнопки и присвоить имени изображению что-то вроде PART_Image, чтобы вы могли получить к нему доступ из VisualState.

Теперь, если вы хотите иметь возможность указывать оба фона непосредственно в XAML, а не в шаблоне, вам нужно реализовать пользовательский UserControl, наследующий от Button.

Но если вы этого не сделаете, вы можете просто использовать ImageBrush для рисования фона.

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <ImageBrush ImageSource="Pressed.png" />
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

А затем, аналогично, измените определение кнопки, если вы также хотите изображение для неотжатого состояния.

<Button Style="{StaticResource CustomButton}">
    <Button.Background>
        <ImageBrush ImageSource="NotPressed.png" />
    </Button.Background>
    <Button.Content>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
            <TextBlock VerticalAlignment="Center" Text="hello" />
        </StackPanel>
    </Button.Content>
</Button>
...