Раскадровка не найдена в области имен стиля

Проблема, с которой я сталкиваюсь, заключается в том, что если я основываю стиль на втором стиле, содержащем раскадровку, то возникает исключение в Trigger.ExitAction.

  • Если я наведу указатель мыши на любой из прямоугольников в приведенной ниже демонстрации, раскадровка запустится, и прямоугольники изменят цвет.
  • Когда мышь покидает красный прямоугольник со стилем = 'rectStyle', раскадровка удаляется.
  • Когда мышь покидает синий прямоугольник (, который использует производный стиль), я получаю это исключение:

    InvalidOperationException:Имя «MouseOverStoryboard» не может быть найдено в области имен «System.Windows.Style».

Итак,:

  • Допустимо ли иметь раскадровку в базовом стиле?
  • Есть ли более явный способ ссылки на BeginStoryboardName, чтобы эта ошибка не возникала?
  • Любые другие предложения?

В конце концов, чего я пытаюсь добиться, -используйте стиль, содержащий триггеры и раскадровки, в нескольких других стилях.

Вот простой код, демонстрирующий проблему.:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <Grid.Resources>
        <Style x:Key="rectStyle" TargetType="{x:Type Rectangle}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard x:Name="MouseOverStoryboard">
                            <Storyboard>
                                <ColorAnimation To="PaleGoldenrod" 
                                   Storyboard.TargetProperty="(Fill).(Color)" 
                                   Duration="0:0:1"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <StopStoryboard BeginStoryboardName="MouseOverStoryboard"/>
                    </Trigger.ExitActions>
                </Trigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="rectStyle2" TargetType="{x:Type Rectangle}" 
               BasedOn="{StaticResource rectStyle}"/>
    </Grid.Resources>

    <Rectangle Grid.Row="0" Width="100" Height="100" Fill="Red" 
               Style="{StaticResource rectStyle}" />
    <Rectangle Grid.Row="1" Width="100" Height="100" Fill="Blue" 
               Style="{StaticResource rectStyle2}" />
</Grid>
5
задан Phil 29 March 2012 в 07:56
поделиться