【问题标题】:Animate dynamically-defined content of a WPF control对 WPF 控件的动态定义内容进行动画处理
【发布时间】:2021-04-17 07:54:46
【问题描述】:

我需要创建一个外观可变但行为常见的UserControl。 IE。外观可以不同:SquarePolygonEllipse。但是控件需要能够为上述Square/Polygon/Ellipse设置动画(淡入淡出)。

我可以创建三个不同的控件并在每个控件中定义一个Storyboard,并将情节提要指向我的控件中的任何形状。但我只想定义一次故事板以遵循 DRY 原则。因此,我创建了一个没有此类内容的控件,并希望将情节提要指向它将包含的任何内容:

<UserControl x:Class="wpf_test.StarControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:wpf_test"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <Storyboard x:Key="FadeInStoryboard">
            <DoubleAnimation Storyboard.TargetName="?????"
                             Storyboard.TargetProperty="Opacity"
                             Duration="0:0:2"
                             From="0"
                             To="1"/>
        </Storyboard>
        <Storyboard x:Key="FadeOutStoryboard">
            <DoubleAnimation Storyboard.TargetName="?????"
                             Storyboard.TargetProperty="Opacity"
                             Duration="0:0:2"
                             From="1"
                             To="0"/>
        </Storyboard>
    </UserControl.Resources>
    

</UserControl>

然后我可以将我需要的任何形状放入该控件中,例如使用SyleTemplate 设置器,但我的问题是我不知道如何将我的Storyboards 指向未来的形状,即在Storyboard.TargetName="?????" 中放入什么而不是问号。

【问题讨论】:

  • 你尝试了用户控件上的名称吗?
  • 动画用户控件本身的不透明度。
  • 谢谢,安迪和 EldHasp。你的回答有帮助。我不知道这么简单。如果您想获得我的支持,请随时发布您的 cmets 作为答案。

标签: c# .net wpf xaml


【解决方案1】:

根据 @Andy 和 @EldHasp 的 cmets,解决方案是在 UserControl 上添加一个名称并为 UserControl 本身的不透明度设置动画。

<UserControl x:Class="wpf_test.StarControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:wpf_test"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300"
             x:Name="ThisStarControl">
    <UserControl.Resources>
        <Storyboard x:Key="FadeInStoryboard">
            <DoubleAnimation Storyboard.TargetName="ThisStarControl"
                             Storyboard.TargetProperty="Opacity"
                             Duration="0:0:2"
                             From="0"
                             To="1"/>
        </Storyboard>
        <Storyboard x:Key="FadeOutStoryboard">
            <DoubleAnimation Storyboard.TargetName="ThisStarControl"
                             Storyboard.TargetProperty="Opacity"
                             Duration="0:0:2"
                             From="1"
                             To="0"/>
        </Storyboard>
    </UserControl.Resources>
    
</UserControl>

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多