Avalonia 常用控件三 Window窗体相关二

1、效果演示

2、在Views中创建WindowDemo.axaml如下图

WindowDemo.axaml代码如下

<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"
        mc:Ignorable="d" d:DesignWidth="200" d:DesignHeight="200"
        Width="200"
        Height="200"
        x:Class="AvaloniaStepByStepLearning.WindowDemo"
        WindowStartupLocation="CenterOwner"
        Title="WindowDemo">

    <Button x:Name="btnClose" Click="BtnClose_OnClick" HorizontalAlignment="Center" VerticalAlignment="Center" Content="关闭窗口"/>
</Window>

 WindowDemo.axaml.cs代码如下:

using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;

namespace AvaloniaStepByStepLearning;

public partial class WindowDemo : Window
{
    public WindowDemo()
    {
        InitializeComponent();
    }

    private void BtnClose_OnClick(object? sender, RoutedEventArgs e)
    {
        Close("返回的数据");
    }
}

3、示例代码步骤

3.1、MainView.axaml添加代码如下

		<Button HorizontalAlignment="Center" Content="Menu/菜单">
			<Button.Flyout>
				<MenuFlyout>
					<MenuItem x:Name="MItOpen" Header="打开" Click="MenuItem_OnClick"/>
					<MenuItem Header="-"/>
					<MenuItem x:Name="MItClose" Header="关闭" Click="MenuItem_OnClick"/>
                    <MenuItem Header="-"/>
                    <MenuItem x:Name="MItHideAndShow" Header="隐藏/显示" Click="MenuItem_OnClick"/>
                    
				</MenuFlyout>
			</Button.Flyout>
		</Button>

        <Button x:Name="btnGetString" HorizontalAlignment="Center" Content="MenuDialog" Margin="0 15 0 0">
            <Button.Flyout>
                <MenuFlyout>
                    <MenuItem x:Name="MItOpenDialog" Header="打开无返回值" Click="MenuItem_OnClick"/>
                    <MenuItem x:Name="MItOpenGetDialog" Header="打开获取返回值" Click="MenuItem_OnClick"/>
					<MenuItem Header="-"/>
                    <MenuItem x:Name="MItCloseDialog" Header="关闭" Click="MenuItem_OnClick"/>
                </MenuFlyout>
            </Button.Flyout>
        </Button>

3.2、MainView.axaml.cs添加代码如下

    public Window currenWindow
    {
        get
        {
            return GetParentWindow();
        }
    }

    public Window GetParentWindow()
    {
        if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
        {
            return desktop.MainWindow;
        }
        else
        {
            return null;
        }
    }

    private WindowDemo _windowDemo;
    private async void MenuItem_OnClick(object? sender, RoutedEventArgs e)
    {
        MenuItem _menuItem = (MenuItem)sender;

        switch (_menuItem.Name)
        {
            case "MItOpen":
                _windowDemo = new WindowDemo();
                _windowDemo.Show();
                break;
            case "MItClose":
                _windowDemo.Close();
                _windowDemo = null;
                break;
            case "MItHideAndShow":
                if (_windowDemo==null)
                {
                    _windowDemo = new WindowDemo();
                }
                _windowDemo.Hide();
                Thread.Sleep(3000);
                _windowDemo.Show();
                break;
            case "MItOpenDialog":
                if (_windowDemo!=null)
                {
                    _windowDemo.Close();
                    _windowDemo = null;
                }
                _windowDemo = new WindowDemo();
                await _windowDemo.ShowDialog(currenWindow);
                break;
            case "MItOpenGetDialog":
                _windowDemo = new WindowDemo();
                var str=await _windowDemo.ShowDialog<string>(currenWindow);
                btnGetString.Content = str;
                Debug.WriteLine(str);
                break;
            case "MItCloseDialog":
                if (_windowDemo!=null)
                {
                    _windowDemo.Close();
                    _windowDemo = null;
                }
                break;
            default:
                break;
        }
    }

3.3、Avalonia 获取MainWindow.axaml 代码如下

    public Window currenWindow
    {
        get
        {
            return GetParentWindow();
        }
    }

    public Window GetParentWindow()
    {
        if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
        {
            return desktop.MainWindow;
        }
        else
        {
            return null;
        }
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Avalonia是一种用于构建跨平台用户界面的开源框架。导航控件Avalonia中的一种重要控件,用于在不同页面之间进行导航操作。 Avalonia的导航控件允许我们在应用程序中创建多个页面,并且能够在这些页面之间进行平滑的切换。导航控件提供了一种结构化的方式来组织和管理应用程序的不同界面。通过导航控件,我们可以通过简单的命令或代码逻辑来实现页面的导航和跳转。 导航控件通常由两个主要组件组成:导航器和页面容器。导航器负责维护当前页面的状态,并提供导航操作的方法和事件。页面容器用于显示和管理不同的页面。当我们进行页面导航时,导航器会负责加载、显示和销毁页面。 对于使用Avalonia导航控件的应用程序,我们可以在页面间使用导航器提供的方法来切换页面,这样可以实现应用程序的整体流程控制。例如,我们可以使用导航控件在登录页面和主页面之间进行导航,或者在主页面的不同子页面之间进行导航。 此外,Avalonia导航控件还可以与其他控件一起使用,以实现更复杂的用户界面。例如,我们可以将导航控件和菜单控件结合使用,以创建具有导航功能的应用程序菜单。我们也可以将导航控件和数据绑定一起使用,以实现基于数据驱动的页面导航。 总而言之,Avalonia导航控件是一种实用的工具,可以帮助我们在Avalonia应用程序中有效地管理和导航页面,提供良好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为风而战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值