【发布时间】:2021-04-05 21:13:00
【问题描述】:
在 Windows 平台上将 GtkSharp 与 .Net Core 项目一起使用:
<PackageReference Include="GtkSharp" Version="3.24.24.4" />
我正在尝试模拟淡入简单的动画。在 Window 构造函数中,Opacity 设置为 0.1,然后设置一个计时器以保持将其增加到 1。
现在,尽管属性 Window.Opacity 的值是正确的(第一次调用 timout 处理程序,它是 0.1,在构造函数中设置),开始时的窗口始终显示为完全不透明(就像在构造函数中设置的值被忽略) .
定时器处理程序对该属性的连续更新工作正常(不透明度值被更新,屏幕上窗口的实际不透明度如下)。它只是忽略不透明度,如果窗口的第一个显示。
我尝试从 Shown 处理程序中设置不透明度,在 Window.Show() 之前,在 Window.Show() 之后和其他几个 - 尽管Opacity 属性的值设置为,但它在构造后始终可见并以完全不透明度显示0.1(或任何其他值 >= 0)。在 .glade 文件中设置时,它会以同样的方式忽略它。
public class MainWindow : Window
{
public MainWindow() : this(new Builder("MainWindow.glade")) { }
private MainWindow(Builder builder) : base(builder.GetObject("MainWindow").Handle)
{
builder.Autoconnect(this);
Opacity = 0.1;
GLib.Timeout.Add(2000, new GLib.TimeoutHandler(fadein_timeout));
}
bool fadein_timeout()
{
this.Opacity += 0.1; // first time here, value of Opacity is 0.1 (as expected), but windows is shown with 100% opacity (unexpected)
if (Opacity >= 1.0)
return false;
return true;
}
}
知道如何让它工作吗? Ofc,我想避免使用“快速”超时来快速隐藏它,以避免闪烁。
【问题讨论】:
-
你正在处理的是Window的show-window-animation。在窗口完全实现之前,Windows 会快速淡入。这是操作系统级别的事情。您可能必须将其从 TopLevel 窗口更改为其他窗口(工具窗口?对话框?)才能停止这样做。无论你最终做什么都可能很笨拙。