Avalonia如何更改全局背景色

1.项目下载地址:https://gitee.com/confusedkitten/avalonia-demo

2.UI库Semi.Avalonia,项目地址  https://github.com/irihitech/Semi.Avalonia

3.ColorView,使用Semi.Avalonia.ColorPicker,Nuget获取就行 

4.样式预览

以下是测试专用方法,动态改变默认背景色,实际上你只要在你的资源里设置以下    <SolidColorBrush x:Key="WindowDefaultBackground">#336699</SolidColorBrush>,就可以了,这个资源文件在App.axaml中引用以下就生效了

 5.WindowBackground.axaml

<UserControl 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"
			 xmlns:colorPicker="clr-namespace:Semi.Avalonia.ColorPicker;assembly=Semi.Avalonia.ColorPicker"
             xmlns:controls="using:Avalonia.Controls"
             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
             x:Class="AvaloniaDemo.Pages.WindowBackground">
	<StackPanel Spacing="20">
		<StackPanel
			 VerticalAlignment="Top"
			 Orientation="Horizontal"
			 Spacing="20">
			<ColorView ColorSpectrumShape="Ring" x:Name="ColorV" Loaded="ColorVLoaded"/>
		</StackPanel>
	</StackPanel>
</UserControl>

6.WindowBackground.axaml.cs 

using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using System;

namespace AvaloniaDemo.Pages;

public partial class WindowBackground : UserControl
{
    public EventHandler<ColorChangedEventArgs>? ColorChangedHandler;
    public WindowBackground()
    {
        InitializeComponent();
    }

    private void ColorVLoaded(object? sender, RoutedEventArgs e)
    {
        if (sender is ColorView colorView)
            colorView.ColorChanged += ColorChanged;
    }

    private void ColorChanged(object? sender, ColorChangedEventArgs e)
    {
        ColorChangedHandler?.Invoke(this, e);
    }
}

7.MainWindow.axaml.cs

using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Avalonia.Themes.Fluent;
using AvaloniaDemo.Pages;

namespace AvaloniaDemo.Views
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();
        }

        private void TabLoaded(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
        {
            if (sender is WindowBackground windowBackground)
                windowBackground.ColorChangedHandler += ColorChanged;
        }

        private void ColorChanged(object? sender, ColorChangedEventArgs e)
        {
            Resources["WindowDefaultBackground"] = new SolidColorBrush(e.NewColor);
        }

        private void InitializeComponent()
        {
            AvaloniaXamlLoader.Load(this);

        }
    }
}

8. 标题栏颜色问题

参考 https://github.com/AvaloniaUI/Avalonia/issues/186

解决方案是,设置 SystemDecorations="None",就是不要标题栏了,自己画一个:类似这个样子

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:AvaloniaDemo.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:pages="using:AvaloniaDemo.Pages"
		mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="AvaloniaDemo.Views.MainWindow"
        x:DataType="vm:MainWindowViewModel"
        Icon="/Assets/avalonia-logo.ico"
		SystemDecorations="None"
        Title="AvaloniaDemo">

	<Design.DataContext>
		<!-- This only sets the DataContext for the previewer in an IDE,
             to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
		<vm:MainWindowViewModel/>
	</Design.DataContext>
	<Grid RowDefinitions="40,*">
		<StackPanel Background="Pink" Orientation="Horizontal" VerticalAlignment="Center">
			<TextBlock Text="画一个标题栏"/>
			<Button Content="×" FontSize="25" Margin="1010 0 0 0"/>
		</StackPanel>
		<TabControl 
			   Name="tab"
			   Grid.Row="1"
			   Margin="8"
			   Padding="20,0,0,0"
			   HorizontalAlignment="Stretch"
			   TabStripPlacement="Left">
			<TabItem Header="DataGrid">
				<pages:DataGrid />
			</TabItem>
		
		</TabControl>
	</Grid>
</Window>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Avalonia Print是一种用于在Avalonia图形界面框架中进行打印的功能。Avalonia是一个用于创建跨平台用户界面的开源项目,而Avalonia Print则是其提供的一个用于打印的工具。通过Avalonia Print,我们可以在Avalonia应用程序中实现打印功能,无论是打印文本、图像还是其他类型的内容都可以轻松实现。 Avalonia Print的使用相对简单,我们只需要在Avalonia应用程序中引入相关的命名空间和类,就可以使用其提供的打印方法和属性。我们可以通过调用Avalonia Print提供的Print方法来触发打印操作,而在打印过程中,可以使用Avalonia Print提供的一些属性来设置打印的参数,例如打印机名称、打印份数、页面方向以及页面大小等。 使用Avalonia Print进行打印时,我们可以先创建一个打印文档对象,然后在该文档对象中定义要打印的内容,包括页面布局、文本内容、图像等等。在定义完成后,我们可以将该打印文档对象传递给Avalonia Print的Print方法,以开始打印操作。 值得一提的是,Avalonia Print还提供了一些与打印相关的事件,如打印开始事件、打印完成事件等,我们可以通过订阅这些事件来获得打印的进度和结果。此外,Avalonia Print还支持在打印过程中自定义页面的外观,例如可以通过实现自定义的页面模板来实现自定义的打印布局。 总之,Avalonia Print是Avalonia框架中的一个方便易用的打印工具,通过它我们可以在Avalonia应用程序中实现打印功能,为用户提供更好的打印体验。无论是在开发商业应用程序、办公软件还是其他场景中,Avalonia Print都能为我们提供便捷高效的打印解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值