网格列在动画时改变宽度

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(使用前将#替换为@)

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

  • 如何从作为 UWP 运行的 WPF 应用程序处理文件激活?

    我有一个WPF我想要处理文件激活的应用程序 我找到了通过向注册表添加特定值来解决问题的解决方案 问题是最终的应用程序应该是UWP应用程序 我正在使用桌面桥来执行此操作 如果应用程序运行为UWP 它无法到达注册表来设置这些特定值 有没有其他方
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 使用 Assembly.ReflectionOnlyLoadFrom 加载 WPF 项目引用的程序集时出现奇怪的 FileLoadException

    我有一个自定义 MSBuild 任务 可以查看程序集内部以获取一些属性元数据 Assembly assembly Assembly ReflectionOnlyLoadFrom AssemblyFile 这是我们的自动化构建 发布流程所使用
  • WPF 在菜单上选择项目或在视图模型中获取命令参数

    我正在寻找几个小时来解决一个简单的问题 我想在我的菜单项上使用 SelectedItem 但经过几个小时的 stackoverflow 我发现这是不可能的 我发现了很多关于 CommandParameter 的信息 但我不明白它是如何工作的
  • Control.Focus() 和 FocusManager.SetFocusedElement() 之间的区别

    从字面上看 我想知道这一点 在某些情况下 Focus 看起来比 SetFocusedElement 更好 但另一种情况 则是逆转 所以我必须知道那里有什么不同的东西 另外 根据 MSDN Focus 用于键盘焦点 SetFocusedEle
  • 如何在谷歌地图上显示闪烁的图标

    我想在谷歌地图上显示用户的当前位置 每件事对我来说都运转良好 我只是使用标记在地图上显示当前位置 现在我想让该标记像 Android 手机上的原始谷歌地图应用程序一样闪烁 我想我必须使用动画来达到这个目的 但我不知道如何使用它 我正在互联网
  • 使用 RenderTargetBitmap 的 WPF 画布区域的快照

    我想在我的应用程序中创建画布区域的快照 我使用 Visual Brush 来获取快照并使用 PngEncoder 保存相同的快照 但生成的 PNG 只是一个空的黑色图像 我不确定问题是与创建的 BitmapSource 还是 PNGEnco
  • 从 StaticResource 设置 RowDefinition 高度

    在我的 WPF 样式中 我定义了一个标准网格行高 我想将其应用到几个地方 如下所示
  • WPF 中图像的淡入淡出

    当我更改幻灯片放映等图像源时 如何实现淡入和淡出图像 我的图像从本地和网络加载 并且其数量是可变的 谢谢 您可以编写一个扩展方法 通过动画显示图像来淡出图像Opacity属性设置为 0 然后设置Source属性并最终将不透明度动画回到 1
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 现代 UI WPF 导航

    我正在使用现代 ui wpf 并尝试从 CheckLogin xaml 页面导航到 MainWindow xaml 页面 它们位于解决方案根目录中 我在 CheckLogin xaml 中写了这样的内容 BBCodeBlock bbBloc
  • 每次打开应用程序时运行动画

    我在 viewDidLoad 中有一个动画 该动画在应用程序第一次启动时运行 如果退出应用程序 然后再次启动它 动画将不会播放 我该如何让动画在每次打开应用程序时播放 谢谢你的帮助 在 iOS 4 中 按主页按钮不会终止应用程序 而是将其挂
  • WPF 列表框不会垂直滚动

    在 Groupbox 中 我有一个 Listbox ListboxItems 也在 XAML 中定义 列表框定义为
  • Mahapps 弹出窗口未与 caliburn.micro 一起出现

    我试图使用 mahapps 和 caliburn micro 在 wpf 中显示弹出窗口 不幸的是 弹出窗口的视图未得到解析 我得到的只是弹出窗口中显示的视图模型的类型名称 我需要根据 shell 中的 ActiveItem 显示弹出窗口
  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 如何让 DataTemplate.DataTrigger 检查大于或小于?

    下列DataTemplate DataTrigger如果是 则使年龄显示为红色equal to 30 如果是的话 如何使年龄显示为红色比 更棒 30
  • 根据 AD 组成员身份限制对 WPF 视图的访问

    我们有一个 WPF 应用程序 我们希望根据用户的 AD 组成员身份限制对应用程序的访问 我们可以将其作为每个视图的属性 或者作为用户启动应用程序时的检查吗 任何代码示例将不胜感激 在 NET 3 5 及更高版本上执行此操作的最简单方法是使用
  • 能够在 WPF 网络浏览器中支持 Html5

    我的WPF浏览器不支持网页上的html5元素 我不知道如何实现对它的支持 我确实安装了 IE9 并且可以看到使用 IE 浏览的 html5 元素 非常感谢任何关于如何添加对 html5 支持的帮助 我实际上自己找到了解决方案 一切都在这个页
  • 如何转换WPF项目以便它可以被单独的exe用作类库

    有没有人尝试过或觉得需要在独立的 exe 中启动应用程序并将 WPF 用作另一个 DLL 而不是在其中包含 Main 方法 我看到的优点是逻辑分离 并且能够在 WPF 代码之外设置工厂等 从而减少程序集依赖性 我已经尝试过这样做并且可以做到

随机推荐

  • 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 属性不是整数 动画工作得很好 但是当我激活它时 它似乎随机地改变了第二列的宽度 有时只是大几个像素