首页 > 解决方案 > VisualBrush 淡入淡出动画

问题描述

我正在尝试让 VisualBrush 在设置时自动淡入/淡出,但不幸的是它不能正常工作。它没有真正消失,而是立即消失或出现,完全忽略了故事板——或者我试图捕捉错误的事件。

<VisualBrush x:Key="CustomHatchBrush" TileMode="None" Viewport="0,0,100,100" ViewportUnits="Absolute" Viewbox="0,0,100,100" ViewboxUnits="Absolute">
    <VisualBrush.Visual>
        <Canvas>
            <Canvas.Triggers>
                <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Duration="0:0:0.2" From="0" To="1" Storyboard.TargetProperty="(Canvas.Opacity)" RepeatBehavior="1x" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
                <EventTrigger RoutedEvent="FrameworkElement.Unloaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Duration="0:0:0.2" From="1" To="0" Storyboard.TargetProperty="(Canvas.Opacity)" RepeatBehavior="1x" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Canvas.Triggers>
            <Rectangle Canvas.Top="0" Canvas.Left="0" Width="100" Height="100" Fill="Orange" />
            <Rectangle Canvas.Top="0" Canvas.Left="0" Width="100" Height="100" Fill="{DynamicResource CaretBrush}" />
        </Canvas>
    </VisualBrush.Visual>
</VisualBrush>

我通常想在 ListBoxItem 的 Template 中使用它作为 BorderBrush,如下所示:

<ControlTemplate TargetType="{x:Type ListBoxItem}">
    <Border x:Name="ca" BorderThickness="3" SnapsToDevicePixels="true" Padding="0">
        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="4" Background="Transparent" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="true" Padding="0">
            <ContentPresenter HorizontalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
        </Border>
    </Border>
    <ControlTemplate.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Prop1}" Value="true"/>
                <Condition Binding="{Binding Prop2}" Value="true"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="BorderBrush" TargetName="ca" Value="{DynamicResource CustomHatchBrush}"/>
        </MultiDataTrigger>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Prop1}" Value="true"/>
                <Condition Binding="{Binding Prop2}" Value="false"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="BorderBrush" TargetName="ca" Value="{DynamicResource CustomHatchBrush2}"/>
        </MultiDataTrigger>
        <DataTrigger Binding="{Binding Prop1}" Value="false">
            <Setter Property="BorderBrush" TargetName="ca" Value="Transparent"/>
        </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

我尝试了许多应用情节提要的方法,例如在绑定内部,但它总是立即完成,完全忽略情节提要的持续时间。

我错过了什么?这个控件通常工作得很好(对象有名称并且有多个实例,所以可能会出错),我只是无法创建我想要实现的视觉效果。

标签: c#wpfxaml

解决方案


推荐阅读