【问题标题】:Conflict When Two Storyboards Sets the Opacity Property?两个故事板设置不透明度属性时发生冲突?
【发布时间】:2011-02-07 20:03:58
【问题描述】:

背景:

我有一个 WPF UserControl(MainControl - 未在下面的代码中显示),其中包含另一个(在下面的代码中称为 MyControl)。

MainControl 将其 DataContext 设置为具有项目属性的对象。 加载 MainControl 时,Project-property 始终为 null。

问题:

当 MainControl 加载时,我想使用特殊情节提要淡入 MyControl(仅使用过一次(此“specialFadeInStoryboard”将 MyControl 的 Opacity-property 从 0 更改为 1)。

当 Project-property 设置为 null 以外的值时,我希望 MyControl 使用“fadeOutStoryboard”淡出(将 MyControl 的 Opacity-property 更改为 0),如果之后将其设置为 null,我想淡出这次再次使用“fadeInStoryboard”(将 MyControl 的 Opacity-property 更改为 1)。

但是,在为“specialFadeInStoryboard”添加代码后,MyControl 永远不会淡出...

我做错了什么?

<local:MyControl Visibility="{Binding RelativeSource={RelativeSource Self}, Path=Opacity, Converter={StaticResource opacityToVisibilityConverter}, Mode=OneWay}">
    <local:MyControl.Style>
        <Style>
            <Style.Triggers>
                <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                    <BeginStoryboard Storyboard="{StaticResource specialFadeInStoryboard}"/>
                </EventTrigger>
                <DataTrigger Binding="{Binding Project, Converter={StaticResource nullToBooleanConverter}, Mode=OneWay}" Value="True">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/>
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <BeginStoryboard Storyboard="{StaticResource fadeInStoryboard}"/>
                    </DataTrigger.ExitActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </local:MyControl.Style>
</local:MyControl>

【问题讨论】:

    标签: wpf triggers properties opacity storyboard


    【解决方案1】:

    您可能需要在其他褪色情节提要开始运行之前停止specialFadeInStoryboard。你可以这样做:

    <DataTrigger.EnterActions>
        <StopStoryboard BeginStoryboardName="specialFadeInStoryboard"/>
        <BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/>
    </DataTrigger.EnterActions>
    

    【讨论】:

    • 感谢您的回复,但是当 EnterActions 被触发时, 标签给了我这个错误: InvalidOperationException: 'specialFadeInStoryboard' name can not be found in the name scope of 'System.Windows.Style'。我什至尝试移动情节提要,使其成为 的子级...但这也不起作用:(
    • 通过创建 af Style 解决了这个问题,并为“模板”设置了一个 Setter。模板的值是一个 ControlTemplate,其中所有情节提要都在“ControlTemplate.Resources”部分中定义...
    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多