Исключение: «Отсутствует значение ключа для объекта« Раскадровка ».» Со стилизованными триггерами - PullRequest
0 голосов
/ 18 августа 2010

Я рестайлинг кнопки, и это включает в себя предоставление controlTemplate, а также добавление некоторых триггеров (для mouseenter и mouseleave).

Мой XAML выглядит следующим образом:

<Style TargetType="Button">
    <Style.Resources>
        <Color  x:Key="ForeColour" R="128" G="128" B="128" A="255"/>

        <Color x:Key="BackColour" R="211" G="211" B="211" A="255"/>

        <Color x:Key="GlowColour" R="30" G="144" B="255" A="255"/>

        <SolidColorBrush Color="{StaticResource ResourceKey=ForeColour}" x:Key="ForeBrush"/>

        <LinearGradientBrush x:Key="BackBrush" StartPoint="0,1" EndPoint="0,0">
            <GradientStop Color="White" Offset="0.5"/>
            <GradientStop Color="{StaticResource ResourceKey=BackColour}"  Offset="1"/>
        </LinearGradientBrush>

        <Storyboard x:Name="mouseOverText">
            <ColorAnimation Storyboard.Target="{Binding RelativeSource= {RelativeSource Self}" Storyboard.TargetProperty="Foreground" From="{StaticResource ResourceKey=ForeColour}" To="{StaticResource ResourceKey=GlowColour}"/>
        </Storyboard>

    </Style.Resources>

    <Setter Property="Foreground" Value="{StaticResource ResourceKey=ForeBrush}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border BorderBrush="LightGray" BorderThickness="2" CornerRadius="8" Background="{StaticResource ResourceKey=BackBrush}">
                        <ContentPresenter x:Name="cnpContent" Opacity="1" VerticalAlignment="Center" HorizontalAlignment="Center" Content="{TemplateBinding Content}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <EventTrigger  RoutedEvent="MouseEnter">
            <BeginStoryboard Storyboard="{StaticResource mouseOverText}"/>
        </EventTrigger>
    </Style.Triggers>
</Style>

но при запуске я получаю следующую ошибку при запуске:

'Missing key value on 'Storyboard' object.' Line number '88' and line position '31'.

Что соответствует этой строке:

<ColorAnimation Storyboard.Target="{Binding RelativeSource= {RelativeSource Self}" Storyboard.TargetProperty="Foreground" From="{StaticResource ResourceKey=ForeColour}" To="{StaticResource ResourceKey=GlowColour}"/>

Все, что я пытаюсь сделать, это заставить передний план кнопки выцвести на другой цвет, когда мышь наведет на него курсор. Кто-нибудь есть идеи, где я иду не так? Я не могу понять это.

1 Ответ

3 голосов
/ 18 августа 2010

Я вижу три вопроса.

Во-первых, вы добавляете раскадровку в словарь ресурсов без указания ключа. Я думаю, что вы хотите x:Key вместо x:Name.

Следующим является то, что, устанавливая Storyboard.Target для привязки с RelativeSource Self, вы устанавливаете цель для самой ColorAnimation. На самом деле вы можете просто оставить этот атрибут выключенным, и он будет нацеливаться на кнопку по умолчанию.

Наконец, у вас для TargetProperty установлено значение Foreground, но вы действительно хотите анимировать свойство Color кисти Foreground, поэтому вам нужно использовать Foreground.Color. Попробуйте это:

<Storyboard x:Key="mouseOverText">
    <ColorAnimation
        Storyboard.TargetProperty="Foreground.Color"
        From="{StaticResource ResourceKey=ForeColour}"
        To="{StaticResource ResourceKey=GlowColour}"/>
</Storyboard>
...