WPF 中动画宽度与实际宽度?

2024-03-22

在 WPF 中如何将元素的宽度从 0 动画到其实际宽度?

我试过这个:

<ControlTemplate.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Duration="0:0:0.3" To="{Binding ElementName=MyElement, Path=ActualWidth}" From="0" Storyboard.TargetProperty="Width" Storyboard.TargetName="MyElement" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</ControlTemplate.Triggers>

如果我将绑定更改为硬编码值,例如100,那么宽度就会正确动画化,只是我想绑定到元素的实际宽度。

如果重要的话,MyElement是一个边框,我正在为选项卡项目设置动画。

根据记录,这也不起作用:

To="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}"

我确信这是错误的,原因有很多,请随时告诉我我违反了多少 WPF 法律,但是..我通过创建自己的 BindableDoubleAnimation 解决了同样的问题。

public class BindableDoubleAnimation : DoubleAnimationBase
{
    DoubleAnimation internalAnimation;

    public DoubleAnimation InternalAnimation { get { return internalAnimation; } }

    public double To
    {
        get { return (double)GetValue(ToProperty); }
        set { SetValue(ToProperty, value); }
    }

    /// <summary>
    /// Dependency backing property for the <see cref="To"/> property.
    /// </summary>
    public static readonly DependencyProperty ToProperty =
        DependencyProperty.Register("To", typeof(double), typeof(BindableDoubleAnimation), new UIPropertyMetadata(0d, new PropertyChangedCallback((s, e) =>
            {
                BindableDoubleAnimation sender = (BindableDoubleAnimation)s;
                sender.internalAnimation.To = (double)e.NewValue;
            })));


    public double From
    {
        get { return (double)GetValue(FromProperty); }
        set { SetValue(FromProperty, value); }
    }

    /// <summary>
    /// Dependency backing property for the <see cref="From"/> property.
    /// </summary>
    public static readonly DependencyProperty FromProperty =
        DependencyProperty.Register("From", typeof(double), typeof(BindableDoubleAnimation), new UIPropertyMetadata(0d, new PropertyChangedCallback((s, e) =>
        {
            BindableDoubleAnimation sender = (BindableDoubleAnimation)s;
            sender.internalAnimation.From = (double)e.NewValue;
        })));


    public BindableDoubleAnimation()
    {
        internalAnimation = new DoubleAnimation();
    }

    protected override double GetCurrentValueCore(double defaultOriginValue, double defaultDestinationValue, AnimationClock animationClock)
    {
        return internalAnimation.GetCurrentValue(defaultOriginValue, defaultDestinationValue, animationClock);
    }

    protected override Freezable CreateInstanceCore()
    {
        return internalAnimation.Clone();;
    }
}

我现在可以自由地使用 To From 属性的绑定。

<local:BindableDoubleAnimation Storyboard.TargetProperty="Width" From="0" To="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Window}}"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 中动画宽度与实际宽度? 的相关文章

随机推荐

  • 打开开发人员工具时,Javascript onclick 不会触发

    我最近遇到一个问题 当浏览器中的开发人员工具打开时 HTML 按钮的 onclick 事件不会触发 但当工具关闭时 它会触发
  • xcodebuild安装路径?

    我正在使用 xcode 开发 iPhone 应用程序 我想自动化 构建和运行 过程 因此想知道是否有任何方法可以在模拟器或设备上安装构建的应用程序 有xcodebuild install命令但我不知道如何设置安装目录DSTROOT到模拟器
  • Bootstrap 按钮组预选按钮,仅含 html

    使用 Bootstrap 我想要一个按钮组 但预选了一个按钮 如果我使用下面的 html 那么第一个按钮将被预先选择 但即使我单击其他按钮之一 它仍然保持活动状态 仅使用 html 如何定义选择一个按钮的按钮组 当我单击其他按钮之一时 该按
  • 使用 SwingNode 在 JavaFX 中显示 VlcJ

    FXMLController初始化方法 FXML private VBox vbContainer MediaPlayerVLC m mediaPlayer public void initialize URL url ResourceBu
  • DevExpress 中的 GridControl 和 GridView 有什么区别?

    DevExpress 中的 GridControl 和 GridView 有什么区别 看起来 GridControl 是 WinForm GridView 是 WPF 但是我在 XAML 中使用 gxg GridContol 这之间也有什么
  • 如何将 PowerShell 脚本作为服务运行?

    我创建了下面的脚本来检查应用程序的端口 2025 并记录连接数 我需要这个脚本作为 Windows 上的服务运行 其名称为netstat 2025 有谁知道是否有这种可能性 我不想使用任务计划程序 而是将脚本作为 Windows 上的服务运
  • iPhone 的 smtp 客户端库

    任何人都知道在 iphone 应用程序中使用的 Objective C smtp 库 我使用skpsmtpmessagehttp code google com p skpsmtpmessage http code google com p
  • 如何使用 Dapper ORM 获取子对象的值?

    我正在使用以下内容检索个人资料详细信息 var profiles connection Query
  • GitHub自动合并后出现致命错误

    我在 GitHub 上有一个存储库 位于here https github com dapphp securimage 我为某人创建了一个工作分支 他们分叉了存储库 对工作分支进行了一些更改并提交了拉取请求 我尝试了这些更改 一切都很好 而
  • 在javascript中调用php函数而不等待响应

    我知道如何使用 ajax 我有一个 Codeigniter 项目 所以我只需调用 url 这一切都很好 但 ajax 等待响应 我只想像您在浏览器中输入的那样调用该网址 我不想等待响应 因为控制器会进行重定向 然后加载视图 我还需要能够通过
  • Pandas 将 Series/DataFrame 限制为一列的值范围

    我想要一个函数 df out df in val min val max 它通过选择一列中的值在定义范围内的行来从另一个系列 数据帧中生成排序的系列 数据帧 例如 如果 df in 看起来像这样 Name Age John 13 Jack
  • Laravel 8 迁移“一般错误:1215 无法添加外键约束”

    我正在尝试在 Laravel 8 上创建迁移 这是我的表 class CreateProductVariationOrderTable extends Migration Run the migrations return void pub
  • 动态更改打印数据

    我正在寻找一种方法来操纵发送到打印机 目前是喷墨打印机 可能是 HP 2460 的数据 我想在打印机每次尝试打印时动态更改数据 IE 在点 1 处 打印的页面将正常保留 但纸张可能会改变其位置 因此我正在寻找一种旋转输入图像以抵消纸张旋转的
  • 如何在 Android 中创建带有虚线/点线分隔线的 ListView?

    我设法通过创建一个名为的文件来弄清楚如何创建自定义形状 带有虚线 dash xml里面的 应用程序 res drawable folder
  • Jenkins 工件插件不归档空目录

    我使用 Jenkins 工件插件来向下流使用 我的问题是 尽管我付出了一切努力 但空文件夹并未被存档 显然 svn 文件也没有存档 首先 你是对的 空目录不能被归档 因为目录作为 Jenkins 中的工件并没有真正的意义 如果您要将工件复制
  • OAuth2(授权代码授予类型)的重定向 URI 中是否应该存在动态查询参数

    诸如此类的来源Okta 赞助网站 https www oauth com oauth2 servers redirect uris redirect uri registration 参见 按请求定制 部分 提到授权请求的redirect
  • 将文件添加到文件夹时运行 Google 脚本

    我希望每次将文件添加到特定文件夹时运行谷歌脚本 这可以做到吗 目前 我有一个触发器使脚本每分钟运行一次 但这并不总是足够快 function mainFunction const folderID folderID provide here
  • 使用 pymssql 连接到 SQL Server 实例

    我正在尝试使用 pymssql 版本 2 0 0b1 dev 20111019 使用 Python 2 7 1 从 Windows 机器连接到 SQL Server 实例 我已经从控制台尝试了最基本的方法 import pymssql c
  • 将 GLEW 与 CMake 链接

    如何使用 CMake 将 GLEW 链接到项目 我们已经尝试使用 CMake 将 GLEW 链接到我们的项目至少 3 个小时 但没有成功 因此接受任何帮助 我正在使用 CMake 3 1 0 附带的 FindGLEW cmake CMake
  • WPF 中动画宽度与实际宽度?

    在 WPF 中如何将元素的宽度从 0 动画到其实际宽度 我试过这个