Назначение TargetName для Storyboard внутри EventTrigger - PullRequest
2 голосов
/ 21 ноября 2011

Я пытаюсь создать оболочку ScrollViewer в WPF с использованием XAML, но столкнулся с проблемой.Обычно мои полосы прокрутки скрыты, но когда пользователь начинает панорамировать экран, они становятся видимыми.Я реализовал эту функцию с помощью ScrollChanged следующим образом:

<!-- Storyboards -->
<Storyboard x:Key="uiStoryboardFader">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.0" />
        <EasingDoubleKeyFrame KeyTime="0:0:2.0" Value="1.0" />
        <EasingDoubleKeyFrame KeyTime="0:0:2.3" Value="0.0" />
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

<!-- Style Declaration -->
<!-- Control Template -->

<ScrollBar x:Name="PART_VerticalScrollBar"   Opacity="0.0" />
<ScrollBar x:Name="PART_HorizontalScrollBar" Opacity="0.0" />

<!-- Control Template Triggers -->

<EventTrigger RoutedEvent="ScrollViewer.ScrollChanged">
    <BeginStoryboard Storyboard="{StaticResource uiStoryboardFader}"
                     Storyboard.TargetName="PART_VerticalScrollBar" />
    <BeginStoryboard Storyboard="{StaticResource uiStoryboardFader}"
                     Storyboard.TargetName="PART_HorizontalScrollBar" />
</EventTrigger>

<!-- Closing -->

. Это позволяет изменить непрозрачность всего ScrollViewer, даже если для TargetName было установлено значение «PART_VerticalScrollBar» и «PART_HorizontScrollBar».Однако, когда я вручную устанавливаю TargetName в объявлении Storyboard, все работает как положено.Можно ли как-нибудь это сделать, назначив TargetName внутри BeginStoryboard?

1 Ответ

0 голосов
/ 23 ноября 2011

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

<DoubleAnimationUsingKeyFrames x:Key="Animation"
        Storyboard.TargetProperty="(UIElement.Opacity)">
    <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.0" />
    <EasingDoubleKeyFrame KeyTime="0:0:2.0" Value="1.0" />
    <EasingDoubleKeyFrame KeyTime="0:0:2.3" Value="0.0" />
</DoubleAnimationUsingKeyFrames>
<!-- ... -->
<EventTrigger RoutedEvent="ScrollViewer.ScrollChanged">
    <BeginStoryboard>
        <Storyboard Storyboard.TargetName="PART_VerticalScrollBar">
            <StaticResourceExtension ResourceKey="Animation" />
        </Storyboard>
    </BeginStoryboard>
    <BeginStoryboard>
        <Storyboard Storyboard.TargetName="PART_HorizontalScrollBar">
            <StaticResourceExtension ResourceKey="Animation" />
        </Storyboard>
    </BeginStoryboard>
</EventTrigger>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...