Унаследованный стиль, генерирующий исключение InvalidOperationException при выполнении действия PauseStoryBoard - PullRequest
0 голосов
/ 16 ноября 2009

XAML ниже делает следующее: когда мышь находится над текстовым блоком, ее текст будет увеличиваться, когда мышь покидает текстовый блок, его текст сжимается. При щелчке мыши размер текста замирает.

Это работает, как и ожидалось, когда стиль Textbox напрямую установлен на ресурс SwellingTexblock. Однако, когда для стиля установлен стиль StyleWrapper, который наследуется от SwellingTexblock, я получаю следующее исключение при щелчке мыши (на голландском языке):

Кан де Наам УвеличитьНад Биннен хет наменберэйк ван System.Windows.Style vinden.

Это означает что-то вроде: EnlargeFont не может быть найден в области имен System.Windows.Style. Что происходит?

<Window x:Class="TriggerSpike.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2" Height="300" Width="300">
    <Window.Resources>
        <Style x:Key="SwellingTextBlock" TargetType="TextBlock">
            <Style.Triggers>
                <EventTrigger RoutedEvent="MouseEnter">
                    <EventTrigger.Actions>
                        <BeginStoryboard Name="EnlargeFont">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="FontSize"
                                                 To="60" Duration="0:0:10"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
                <EventTrigger RoutedEvent="MouseLeave">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="FontSize"
                                                 To="12" Duration="0:0:.5"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
                <EventTrigger RoutedEvent="MouseDown">
                    <PauseStoryboard BeginStoryboardName="EnlargeFont"/>
                </EventTrigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="StyleWrapper" BasedOn="{StaticResource SwellingTextBlock}"
               TargetType="TextBlock"/>
    </Window.Resources>
    <StackPanel>
        <TextBlock Style="{StaticResource StyleWrapper}">test</TextBlock>
    </StackPanel>
</Window>

1 Ответ

0 голосов
/ 16 ноября 2009

Кажется, что это поведение "по замыслу". Вы должны переместить анимацию на шаблон управления, чтобы она заработала.

Вы можете найти полное решение здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...