网格列在动画时改变宽度

2023-12-12

我有一个具有两列和三行的网格元素。最后一行的高度为 0...并且我使用自定义动画类对 height 属性进行动画处理,因为 gridheight 属性不是整数。

动画工作得很好,但是当我激活它时,它似乎随机地改变了第二列的宽度..有时只是大几个像素,有时宽度超过两倍...

这是网格代码

<Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition Width="50"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="1*" />
                            <RowDefinition Height="7"/>
                            <RowDefinition Name="LyricsRow" Height="1">

                                <RowDefinition.Style>
                                    <Style>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=IsTrayOpen}" Value="True">
                                                <DataTrigger.EnterActions>
                                                    <BeginStoryboard>
                                                        <Storyboard>
                                                            <local:GridLengthAnimation
                                                              Storyboard.TargetProperty="Height"
                                                              From="0" To="150" Duration="0:0:0.3" >
                                                            </local:GridLengthAnimation>
                                                        </Storyboard>
                                                    </BeginStoryboard>
                                                </DataTrigger.EnterActions>
                                                <DataTrigger.ExitActions>
                                                    <BeginStoryboard>
                                                        <Storyboard>
                                                            <local:GridLengthAnimation
                                                              Storyboard.TargetProperty="Height"
                                                              From="150" To="0" Duration="0:0:0.5" />
                                                        </Storyboard>
                                                    </BeginStoryboard>
                                                </DataTrigger.ExitActions>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </RowDefinition.Style>

                            </RowDefinition>
                        </Grid.RowDefinitions>

有什么原因可能会发生这种情况吗?


对于那些可能想知道问题中提到的 GridLengthAnimation 实现的人,这里有一个(来自http://social.msdn.microsoft.com/forums/en-US/wpf/thread/da47a4b8-4d39-4d6e-a570-7dbe51a842e4/)

/// <summary>
/// Animates a grid length value just like the DoubleAnimation animates a double value
/// </summary>
public class GridLengthAnimation : AnimationTimeline
{
    /// <summary>
    /// Returns the type of object to animate
    /// </summary>
    public override Type TargetPropertyType
    {
        get
        {
            return typeof(GridLength);
        }
    }

    /// <summary>
    /// Creates an instance of the animation object
    /// </summary>
    /// <returns>Returns the instance of the GridLengthAnimation</returns>
    protected override System.Windows.Freezable CreateInstanceCore()
    {
        return new GridLengthAnimation();
    }

    /// <summary>
    /// Dependency property for the From property
    /// </summary>
    public static readonly DependencyProperty FromProperty = DependencyProperty.Register("From", typeof(GridLength),
            typeof(GridLengthAnimation));

    /// <summary>
    /// CLR Wrapper for the From depenendency property
    /// </summary>
    public GridLength From
    {
        get
        {
            return (GridLength)GetValue(GridLengthAnimation.FromProperty);
        }
        set
        {
            SetValue(GridLengthAnimation.FromProperty, value);
        }
    }

    /// <summary>
    /// Dependency property for the To property
    /// </summary>
    public static readonly DependencyProperty ToProperty = DependencyProperty.Register("To", typeof(GridLength),
            typeof(GridLengthAnimation));

    /// <summary>
    /// CLR Wrapper for the To property
    /// </summary>
    public GridLength To
    {
        get
        {
            return (GridLength)GetValue(GridLengthAnimation.ToProperty);
        }
        set
        {
            SetValue(GridLengthAnimation.ToProperty, value);
        }
    }

    /// <summary>
    /// Animates the grid let set
    /// </summary>
    /// <param name="defaultOriginValue">The original value to animate</param>
    /// <param name="defaultDestinationValue">The final value</param>
    /// <param name="animationClock">The animation clock (timer)</param>
    /// <returns>Returns the new grid length to set</returns>
    public override object GetCurrentValue(object defaultOriginValue,
        object defaultDestinationValue, AnimationClock animationClock)
    {
        double fromVal = ((GridLength)GetValue(GridLengthAnimation.FromProperty)).Value;
        //check that from was set from the caller
        if (fromVal == 1)
            //set the from as the actual value
            fromVal = ((GridLength)defaultDestinationValue).Value;

        double toVal = ((GridLength)GetValue(GridLengthAnimation.ToProperty)).Value;

        if (fromVal > toVal)
            return new GridLength((1 - animationClock.CurrentProgress.Value) * (fromVal - toVal) + toVal, GridUnitType.Star);
        else
            return new GridLength(animationClock.CurrentProgress.Value * (toVal - fromVal) + fromVal, GridUnitType.Star);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网格列在动画时改变宽度 的相关文章

  • 从模板绑定到 viewmodel 的属性

    我为我的 GameViewModel 创建了一个视图 我有一些像这样的xaml
  • 如何向按钮添加动画 gif?

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

    是否可以禁用控件的键盘输入 例如一个ListView 我怎么做 我尝试过覆盖KeyUp KeyDown事件 但显然不是这样的 IsEnabled是一个很好的解决方案 但是我只想禁用键盘交互并保持鼠标交互不变 处理KeyDown事件来得太晚了
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 将 WPF 快捷键绑定到 ViewModel 中的命令

    我有一个使用 MVVM 模式的 WPF 应用程序 将按钮连接到 VM 非常简单 因为它们实现了 ICommand 我有一个工作原理类似的上下文菜单 下一步是为上下文菜单创建快捷键 我不知道如何让快捷键调用命令 这是一个例子
  • 获取代码中的绑定结果

    我可能正在以错误的方式寻找这个 但是 有没有办法通过代码获取绑定的结果值 可能是一些显而易见的东西 但我就是找不到它 您只需致电ProvideValue的绑定方法 困难的部分是你需要通过有效的IServiceProvider到方法 编辑 实
  • 网格内的 ContentPresenter 可见性绑定不起作用?

    我有以下网格
  • 更改鼠标悬停时的矩形背景

    所以我有一个没有背景的矩形 当用户将鼠标悬停在其上时 我想给它一个背景渐变 然后当鼠标离开矩形时删除渐变 请有人发布所需的代码 并告诉我将其放在 cs xaml 文件中的位置吗 Thanks This
  • 窗口关闭后仍在调用方法

    首先我不知道这是不是一个愚蠢的问题 我有这样的场景 首先我有一个主窗口 public MainWindow InitializeComponent dt is a System Windows Threading DispatcherTim
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • AS3如何在角色死亡动画结束时转到MainTimeline中的下一帧

    所以我需要知道我的角色 鸟 是否用管道 hitTestObject 在动画结束后播放骰子动画 它需要在主时间轴中转到游戏结束帧 if bird hitTestObject pipe1 bird gotoAndStop 3 frame 3 w
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何? WPF 窗口 - 最大化,不调整大小/移动

    我正在尝试创建一个已最大化打开的 WPF 窗口 无需调整大小 移动 在系统菜单中 也不在边框中 它应该一直最大化 除非用户最小化它 我尝试将 WindowState Maximized 和 ResizeMode CanMinimize 放在
  • WPF 处理文本、图像和文件粘贴事件

    我正在开发一个 WPF 应用程序 我想捕获 RichTextBox 输入中的粘贴命令并处理粘贴的文件 为此 我使用以下回调
  • 混合 MFC 和 WPF:模态对话框

    我使用 C CLI 界面层将 C WPF 对话框添加到现有的 C MFC 应用程序 我一切正常 只是我遇到了形式问题 例如 MFC 应用程序使用 ShowDialog 显示 WPF 对话框 按预期工作 该 WPF 对话框显示使用 DoMod
  • WPF/C# 将自定义对象列表数据绑定到列表框?

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

随机推荐

  • java.io.NotSerializedException - org.omnifaces.taghandler.Converter

    我有一个在 Jboss 6 上使用 Primefaces 3 5 和 Omnifaces 1 5 的应用程序 使用 myfaces 2 1 5 尝试使用o converter我收到以下错误 org omnifaces taghandler
  • 使用数组求偶数和奇数平均值

    编写一个程序 从用户那里读取 10 个值的列表 将值放入数组中 程序应读取数组 然后计算并显示偶数输入值和奇数输入值的平均值 这应该使用对象 方法和测试器类来完成 我不明白为什么我收到错误 二元运算符的操作数类型错误 我不知道该改变什么 我
  • 使用 CloudFormation 模板部署 IIS 网站

    我有一个 Visual Studio C 部署包 zip 已将其推送到我的 S3 存储 我想运行我的 CloudFormation 脚本并让它创建 IIS 服务器的实例 我有用于此的脚本 然后将 Visual Studio 网站从 S3 存
  • 使用 cron 安排 R 脚本

    我正在尝试使用 cron 安排我的 R 脚本 但它不起作用 R 似乎在 cron 中找不到包 有人可以帮助我吗 谢谢 以下是我的 bash 脚本 source my profile home winie profile script R w
  • Java 8 链式方法参考?

    假设有一个典型的Java Bean class MyBean void setA String id void setB String id List
  • Javascript:sum(2)(3) //返回5是什么意思;

    这是返回其值的代码 function sum a return function b return a b sum 2 3 它返回 5 但如果我输入代码 function sum a function add b return a b re
  • 跟踪 Informix Client for Linux 的 ODBC 调用

    我尝试跟踪 Linux 上运行的程序中的 ODBC 函数调用 该程序动态链接 ODBC 管理器 然后连接到数据库并获取一些数据 我可以通过添加到 odbcinst ini 来使用 unixODBC 跟踪 ODBC 调用 ODBC Trace
  • 没有方法获取字节数组流[重复]

    这个问题在这里已经有答案了 我想获取字节数组流 但我发现Arrays没有获取字节数组流的方法 byte byteArr new byte 100 Arrays stream byteArr Compile time error 我的问题 为
  • tools.jar 丢失 - 但仅限于第一次调用(Tomcat 8/Java 8/ Axis)

    现在 我将 Web 应用程序升级到了 Java 8 在 Tomcat 8 中运行的 axis Web 服务遇到了奇怪的类加载问题 安装 Web 应用程序后第一次调用 Web 服务将导致 RuntimeException 和 在类路径中找不到
  • 关闭连接:java中的下一个

    我有 ResultSet 方法 我将在finally 块中关闭连接 public static ResultSet countdrcountcr String vforacid throws SQLException ResultSet r
  • 如何使用 Rocket 响应包含 JSON 数据的 POST 请求?

    我正在尝试使用创建后端火箭箱 fn main rocket ignite mount routes helloPost launch derive Debug PartialEq Eq RustcEncodable FromForm str
  • @Document 注释中的 MongoDB 和 SpEL 表达式

    我正在尝试使用 SpEL 根据我定义的一些规则将相同的文档加载到不同的集合中 首先从我所拥有的开始 首先是文件 Document collection mySpecialProvider getTargetCollectionName pu
  • 如何在 case 语句中循环遍历表中的值

    抱歉 SQL 新手 我有下表 用户可以更新和 或添加到 Project Type ID Name 1 Documents 2 DVD 3 Poster 我有一个查询 部分需要循环遍历每个记录并创建一个 数据透视 sum case when
  • 从 Qt 中的多线程绘图

    我正在用 Qt 编写一个程序 它运行 10 个工作线程来计算空间中物体的轨迹 他们还必须绘制物体的路径 我有一个派生 QGraphicsEllipseItem 的 Body 类 其中有一个 QPainterPath 模拟 类获取世界上的障碍
  • 网络应用程序共享相同的内存存储[重复]

    这个问题在这里已经有答案了 我在一个用于计算用户详细信息的应用程序中工作 但不知何故 一个用户的价值观会改变另一个用户的价值观 下面是代码片段 def Compute UserScore self details ques no try i
  • 如何在Azure Pipeline中将XCODE版本更新到13.4.1?

    我正在使用 azure pipeline 部署应用程序 出现以下错误 module compiled with Swift 5 6 1 cannot be imported by the Swift 5 5 我尝试过更改配置 但没有成功 任
  • xslt 排序输出 xml

    我正在尝试找到以下问题的解决方案 我正在开发 XSLT 转换 现在大约有 40KB 大 它将相当复杂的 XML 转换为一个非常简单的结构 如下所示
  • Cloud DataFlow 中的 Python 依赖项,requirements.txt 在本地工作,但在工作线程上不起作用

    我正在尝试使用requirements txt 文件运行我的Cloud DataFlow 作业 如此处所述 https cloud google com dataflow pipelines dependency python 我可以只构建
  • Pester 测试用例失败时显示哈希表的内容

    Problem When a Hashtable用作输入Should Pester 只输出类型名而不输出内容 Describe test It test case ht foo 21 bar 42 ht Should BeNullOrEmp
  • 网格列在动画时改变宽度

    我有一个具有两列和三行的网格元素 最后一行的高度为 0 并且我使用自定义动画类对 height 属性进行动画处理 因为 gridheight 属性不是整数 动画工作得很好 但是当我激活它时 它似乎随机地改变了第二列的宽度 有时只是大几个像素