增大/缩小 WPF 动画

2024-04-03

在 WPF 中,当用户获得焦点时TextBox,我想要一些动画,可以使TextBox变成多行并使其Width更大(当他打字时)并且当焦点丢失时,TextBox恢复到原来的大小。

尺寸未知。

另外,最终,TextBox需要在 WPF 内DataGrid.

我以前从未制作过动画,希望得到一些帮助来帮助我入门。谢谢。

EDIT:我已经成功地制作了动画,同时具有一些固定的宽度值(使其成为多行不起作用,但它并不那么重要)。所以我现在的问题是,如果未知,我怎样才能恢复到原来的大小。我可以使用乘数吗Width财产?

到目前为止,这是我的代码:

<Window.Resources>
        <Storyboard x:Key="GrowStoryboard">
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(FrameworkElement.Width)">
                <SplineDoubleKeyFrame KeyTime="00:00:00.4000000" Value="400" KeySpline="0.54,0.27,0.38,0.69"/>
            </DoubleAnimationUsingKeyFrames>
            <Int32Animation Duration="0:0:0.4" From="1" To="3" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(TextBox.MinLines)">
            </Int32Animation>
        </Storyboard>
        <Storyboard x:Key="ShrinkStoryboard">
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(FrameworkElement.Width)">
                <SplineDoubleKeyFrame KeyTime="00:00:00.4000000" Value="200" KeySpline="0.54,0.27,0.38,0.69"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>
    <Window.Triggers>
        <EventTrigger RoutedEvent="FocusManager.GotFocus" SourceName="textBox">
            <BeginStoryboard x:Name="GrowStoryboard_BeginStoryboard" Storyboard="{StaticResource GrowStoryboard}"/>
        </EventTrigger>
        <EventTrigger RoutedEvent="FocusManager.LostFocus" SourceName="textBox">
            <BeginStoryboard x:Name="ShrinkStoryboard_BeginStoryboard" Storyboard="{StaticResource ShrinkStoryboard}"/>
        </EventTrigger>
    </Window.Triggers>

    <StackPanel>
        <TextBox x:Name="textBox" Width="200" Height="20" Text="TextBox" />
        <TextBox x:Name="textBox1" Width="200" Height="20" Text="TextBox" />
    </StackPanel>

虽然 XAML 中没有可以使用的乘数,但您可以创建一个 IValueConverter 类来完成此操作。例如:

    class Multiplier : IValueConverter
{
    public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        var dblValue = 1.0;
        if (value is double)
            dblValue = (double)value;
        else if ( !(value is string) || !double.TryParse( (string)value, out dblValue ) )
            return null;

        var dblParam = 1.0;
        if (parameter is double)
            dblParam = (double)parameter;
        else if ( !(parameter is string) || !double.TryParse( (string)parameter, out dblParam ) )
            return null;

        return dblValue * dblParam;
    }

    public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        throw new NotImplementedException();
    }
}

然后您可以在 XAML 中使用它来使文​​本框的宽度按如下因子增大和缩小......

        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(FrameworkElement.Width)">
            <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="{Binding ElementName=textBox, Path=Width, Converter={StaticResource Multiplier}, ConverterParameter=2}" KeySpline="0.54,0.27,0.38,0.69"/>
        </DoubleAnimationUsingKeyFrames>

        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textBox" Storyboard.TargetProperty="(FrameworkElement.Width)">
            <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="{Binding ElementName=textBox, Path=Width, Converter={StaticResource Multiplier}, ConverterParameter=0.5}" KeySpline="0.54,0.27,0.38,0.69"/>
        </DoubleAnimationUsingKeyFrames>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

增大/缩小 WPF 动画 的相关文章

  • WPF - 在样式中使用 ControlTemplate 资源

    创建样式时 是否可以将 ControlTemplate 属性设置为先前定义的资源 例如 如果我在 ResourceDictionary 中有以下内容
  • requestAnimationFrame 报告的帧速率有时高于显示器的刷新速率

    我使用以下内容来记录应用程序的帧速率 let lastCalledTime let fps let frame 0 let csv Frame Timestamp FPS const refreshLoop gt window reques
  • 如何向按钮添加动画 gif?

    你能告诉我如何在 C 中向按钮添加动画 gif 吗 仅仅通过将 gif 添加到资源并设置为按钮图像并不能很好地工作 下一个帧出现在前一个帧之上 问题似乎在于 c 如何处理透明度 但我不知道如何解决它 提前致谢 编辑 玩完 gif 后 问题出
  • For 循环不适用于 JavaScript 动画

    我正在尝试编写一个 for 循环 以在单击形状按钮时重复 爆炸 路径的动画 但 for 循环无法工作 执行 而且我看不出哪里出了问题 for循环的目的 循环动画路径的过程 然后将动画反转回其原始路径 我知道问题出在 for 循环中的某个地方
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 在 ASP.NET 更新面板中使用时,文本框回发值中缺少回车符(ASCII 字符 13)

    我有一个 ASP NET TextBox 其 TextMode TextBox Mode Multi Line 在 AJAX 更新面板中使用 Text 值已预设为具有多行的值 当使用 Chrome 7 0 517 41 或 Firefox
  • 如何在 RichTextBox 中以编程方式移动插入符位置?

    我有一个 RichTextBox 其中的特殊文本位具有自定义格式 但是 存在一个错误 即插入字符后 插入符号会放置在新插入的字符之前而不是之后 这是因为对于每次编辑 代码都会重新计算内容以应用自定义格式 然后像这样设置 CaretPosit
  • 获取代码中的绑定结果

    我可能正在以错误的方式寻找这个 但是 有没有办法通过代码获取绑定的结果值 可能是一些显而易见的东西 但我就是找不到它 您只需致电ProvideValue的绑定方法 困难的部分是你需要通过有效的IServiceProvider到方法 编辑 实
  • 如何在Wpf中的用户控件中调用MahApps Metro对话框

    当我尝试调用 MahApps Metro 对话框时 我在传递值时遇到错误 在传递参数时调用对话框控制时我需要传递 Metrowindow 参数 但我需要在用户控件中调用它 下面是当我需要对话框控制时我将调用的方法 public async
  • 列表视图上的 TextBlock:如何忽略 TextBlock 中的点击并让列表视图处理它们

    我有一个显示大量信息的列表视图 但是当它为空时 我想在其上覆盖一个文本块 上面写着 没有要显示的信息 或 bla bla bla 添加信息 列表视图设置为响应鼠标单击 但现在如果我单击文本块 这些事件将路由到文本块 我怎样才能让这些事件转到
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • ListView ItemContainerStyle 模板

    我创建了用作 ListView 项目模板的样式 其中包含 CheckBox 和 TextBlock
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表

随机推荐

  • 我对快速会话和 cookie 缺少什么?

    我已经对express express session 和express sql session 有了很大的了解 当用户登录时 我已经在数据库中为会话创建一行 这就是我的设置方式 login route handler this bcryp
  • 使用 Qt Creator 的 C++0x

    我正在尝试使用新的 C 0x 功能Qt创建者 http en wikipedia org wiki Qt Creator在 Windows 下 Qt Creator 2 0 1 我读了主题在 Qt Qt Creator 和 QMake 中配
  • 从代码隐藏绑定字符串格式?

    请有人告诉我如何从代码隐藏中获取格式化为 0 0 的双精度值 如下所示 Binding b new Binding DoubleValue b StringFormat 在 xaml 中 它的工作方式就像 0 0 那这个呢 b String
  • 如何在wpf中延迟调用文本框的textchanged事件

    我有从 Textbox 继承的自定义控件 我想延迟调用 textchanged 事件 Observable FromEventPattern
  • 使用 BeautifulSoup 一次循环解析段落和后续元素

    我有一长串博客评论 编码为 p This is the text br of the comment p div Here the details of the same comment div 我需要在循环的同一周期中解析注释和详细信息
  • VSO REST API - 获取用户个人资料图像仅适用于基本身份验证?

    我正在使用VSO 休息 API让所有成员加入团队 从那里我得到ImageUrl的成员 如果我只是将图像控件绑定到ImageUrl它是空白的 因为VSO要求我登录才能获取个人资料图片 所以我创建了一个HttpClient并设置我的Author
  • 创建计划任务

    我正在开发一个 C WPF 项目 我需要允许用户创建计划任务并将其添加到 Windows 任务计划程序 我怎样才能做到这一点以及我需要什么使用指令和参考资料 因为我在搜索互联网时没有找到太多信息 您可以使用任务计划程序托管包装 https
  • 递归遍历多维数组时对所有值调用 str_replace()

    我基本上想用str replace 多维数组的所有值 我似乎无法弄清楚如何对多维数组执行此操作 当值是一个数组时 我有点卡住了 它似乎处于一个永无休止的循环中 我是 PHP 新手 所以示例会很有帮助 function replace amp
  • 如何通过 URL 传递日期,以便我的 Action 在 MVC 中读取?

    如何通过 URL 传递日期 这就是我想要做的 正如您将看到的 日期使用了在 URL 中无效的正斜杠 http localhost Controller Action id 0d5375aa 6d43 42f1 91f0 ea73d9beb3
  • 为什么变量指针包含相同数据类型的地址?

    指针声明的一般语法 data type pointer name 指针是一个变量 其值是另一个变量的地址 即内存位置的直接地址 与任何变量或常量一样 您必须先声明一个指针 然后才能使用它来存储任何变量地址 指针的数据类型必须与指针所指向的变
  • 在nginx反向代理后面处理flask url_for

    我有一个使用 nginx 进行反向代理 ssl 终止的 Flask 应用程序 但是在 Flask 中使用 url for 和重定向时遇到了麻烦 nginx conf 条目 location flaskapp proxy pass http
  • 如果表单没有焦点,则不会调用 OnPaint

    我有一个带有自定义绘画的用户控件 据我所知 构造函数正确设置了样式 基本代码 public partial class LineChart2 UserControl public LineChart2 InitializeComponent
  • 更改 const 对象 - 没有警告?另外,什么情况下是UB?

    为什么下面的代码没有警告呢 int deserialize students const Student dest const int destCapacityMax FILE ptr file int i 0 ptr file fopen
  • 具有自定义模板的 STL 迭代器

    我有以下模板方法 template
  • 如何重定向到移动网站但保留主题标签?

    我希望拥有它 以便当用户加载我们的页面时 它会检查他们是否在移动设备上 然后将他们重定向到我们网站的移动版本 但保留原始哈希标签他们关注的链接 我尝试使用 javascript 中的哈希标签设置新位置 它在 Chrome 中工作 但在 Sa
  • 创建 ArrayList 元素的数组

    我想创建一个包含 ArrayList 元素的数组 我试过了 ArrayList
  • 创建一个仅指向另一个数组的一部分的数组?

    我有一个包含引用类型元素的巨大数组 并且我想创建许多其他数组 这些数组本质上只是指向该一个大数组的特定部分 换句话说 我想创建 索引器 或 具有长度的指针 在 C 中 使用指针很容易做到这一点 并为每个指针分配一个长度 例如创建一个包含具有
  • 在 iOS 上使用可调整大小的图像时避免混合图层

    我试图避免 iOS 上的混合层以提高性能 但是 我注意到我使用的可调整大小的图像backgroundView of my UITableViewCell被标记为混合层 事实上 使用任何可调整大小的图像 即使是没有透明度的 JPEG 都会导致
  • 如何使用 rspec 配置 Sorbet?

    我有一个简单的测试 但是describe关键字在冰糕测试中不起作用 我在这些方法上收到的错误 Method describe does not exist on T class of
  • 增大/缩小 WPF 动画

    在 WPF 中 当用户获得焦点时TextBox 我想要一些动画 可以使TextBox变成多行并使其Width更大 当他打字时 并且当焦点丢失时 TextBox恢复到原来的大小 尺寸未知 另外 最终 TextBox需要在 WPF 内DataG