如何获得 Avalonia 窗口的尺寸?

如何解决如何获得 Avalonia 窗口的尺寸?

我正在创建一个 C# .NET Core 5 应用程序,该应用程序旨在使用 Avalonia 作为 GUI 在 Windows 10 和 Linux 上运行。我不想使用反应式 api。我不知道如何使用 avalonia 支持通知系统,所以我决定创建一个单独的窗口,该窗口在顶部停留 X 秒并显示标题和消息。该窗口会在 X 秒后消失,或者如果用户点击它,则该窗口会更早消失。

这是代码的一部分:

public class NotificationMessage : Window,INotifyPropertyChanged
{
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    
    public string NMessage { get; set; }
    public string NTitle { get; set; }

    public NotificationMessage()
    {
        InitializeComponent();
    }

    
    public NotificationMessage(string title,string message,int Xparent,int Yparent,int time)
    {
        DataContext = this;
        NMessage = message;
        NTitle = title;
        Timer timer = new Timer(time);
        timer.AutoReset = false;
        
        InitializeComponent();
        timer.Elapsed += OnTime;
        timer.Start();
        double height = this.Height;
        double width = this.ClientSize.Width;
        double sum = height + width; // this line was added just to insert a breakpoint
        //System.Diagnostics.Debug.WriteLine($"{this.Bounds.Width}-{this.Bounds.Height}");
    }

    private void OnTime(object sender,System.EventArgs e)
    {
        
        dispatcher.UIThread.InvokeAsync(() => { this.Close(); });
    }
    private void InitializeComponent()
    {
        AvaloniaXamlLoader.Load(this);
    }

    private void Tapped(object sender,Avalonia.Interactivity.RoutedEventArgs e)
    {
        
        this.Close();
    }
}

窗口是这样调用的:

XScreenSize = Screens.Primary.WorkingArea.Width;
YScreenSize = Screens.Primary.WorkingArea.Height;
var win = new NotificationMessage("my title","my message",XScreenSize,YScreenSize,3000);
win.Show(this);

'this' 指的是 MainWindow。

XScreenSizeYScreenSize 获取屏幕的大小。 我试图获取通知窗口的大小以计算其位置,但对我来说似乎不可能。 win.Height 返回 NaN(同样适用于 win.Widthwin.Bounds 也无济于事。 win.ClientSize 也是如此。 我已经尝试了所有似乎与我相关的属性,但我无法获得新窗口的大小。 有什么方法可以在两个操作系统中都适用吗?

我想这应该很明显,但我也为通知窗口添加了 xaml 文件

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             x:Class="NotificationMessage" HasSystemdecorations="False" CanResize="False" 
        Tapped="Tapped" SizetoContent="WidthAndHeight" FontSize="16" Topmost="True">
  <Border BorderThickness="2">
    <DockPanel Background="DodgerBlue" Margin="2,2,2">

      <TextBlock DockPanel.Dock="Top" Text="{Binding NTitle}" HorizontalAlignment="Center" FontWeight="Medium" />

      <TextBlock Text="{Binding NMessage}" textwrapping="Wrap" Opacity=".8" Margin="2,2"/>

    </DockPanel>
  </Border>

</Window>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?