增大/缩小 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 动画 的相关文章

随机推荐

  • 我对快速会话和 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