avalonia 控件-其他

本文介绍了 Avalonia UI 开发中的一些实用技巧,包括文本块换行与截断显示、窗体自定义无边框、后台代码生成 XAML 控件、设置字体颜色、跨平台图形处理、获取控件截图等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1-TextBlock文本过长,换行与不换行显示

换行:TextWrapping=“Wrap”
不换行使用省略号表示:TextWrapping=“NoWrap” TextTrimming=“CharacterEllipsis”
默认TextWrapping=“NoWrap”

<TextBlock Text="{Binding code} ToolTip.Tip="{Binding Bmc}" TextTrimming="CharacterEllipsis"/>

2-窗体自定义无边框

SystemDecorations.BorderOnly窗体无边框,不能拖动
this.SystemDecorations = SystemDecorations.BorderOnly;

3-后台代码生成xaml页面控件

1-添加NuGet包引用,Avalonia.Markup.Xaml.Loader

在这里插入图片描述

2-使用

 string imageXaml = @"<Image xmlns='https://github.com/avaloniaui' Name='img' Stretch='Uniform' Width='22' Height='22'>
<DrawingImage Drawing = '{StaticResource DrawingGroup}'/> 
</Image>";               
          
if (!string.IsNullOrEmpty(imageXaml))
 {
    var image = (Image)AvaloniaRuntimeXamlLoader.Load(imageXaml);
    btn.Content = image;
 }

4-设置字体颜色

 using Avalonia.Media;
              
 TextBlock1.Foreground = SolidColorBrush.Parse("#3290FA");        
 TextBlock1.Foreground = Brushes.Red;

5-跨平台的平面图形处理(Syetem.Drawing)用包 SkiaSharp

using SkiaSharp;
using SkiaSharp.QrCode;
//
byte[] imgData;int width , height;
SKImage skimage = SKImage.FromEncodedData(imgData);
SKImageInfo skimageInfo = skimage.Info;
SKBitmap skbitmap = new SKBitmap(skimageInfo);
var colcorType = skbitmap.ColorType;
skimageInfo = new SKImageInfo(width, height, colcorType);
skbitmap = skbitmap.Resize(skimageInfo, SKFilterQuality.High);
//获取像素点
SKColor color = skbitmap.GetPixel(x, y);

    using SkiaSharp;
    using SkiaSharp.QrCode;
    
    /// <summary>
    /// 生成二维码
    /// </summary>
    /// <param name="path">图片路径</param>
    /// <param name="wsid">二维码内容</param>
    public static void BuildQRCode(String path, String wsid, Int32 width, Int32 height)
    {
        using var generator = new QRCodeGenerator();
        var qr = generator.CreateQrCode(wsid, ECCLevel.H, true);
        var info = new SKImageInfo(width, height);
        using var surface = SKSurface.Create(info);
        var canvas = surface.Canvas;
        canvas.Render(qr, info.Width, info.Height);
        using var image = surface.Snapshot();
        using var data = image.Encode(SKEncodedImageFormat.Png, 100);
        using var stream = File.OpenWrite(path);
        data.SaveTo(stream);
    }

6-获取控件内容截图

using Avalonia;
using Avalonia.Media.Imaging;

 MemoryStream memoryStream = new MemoryStream();
 using (var bitmap = new RenderTargetBitmap(new PixelSize(Convert.ToInt32(TextBox1.Bounds.Width),  Convert.ToInt32(TextBox1.Bounds.Height)), new Vector(96, 96)))
            {
                bitmap.Render(TextBox1);
                bitmap.Save(memoryStream);
            }
File.WriteAllBytes(file, memoryStream.ToArray());

7-Grid代码设置行列

Panel panel1 = new Panel();

Grid.SetRow(panel1 , 3);
Grid.SetColumn(panel1, 1);
Grid.SetColumnSpan(panel1, 2);
//或者
panel1.SetValue(Grid.RowProperty, 3);
panel1.SetValue(Grid.ColumnProperty, 1);
panel1.SetValue(Grid.ColumnSpanProperty, 2);

//设置所属父控件
grid1.Children.Add(panel1 );

8-后台代码设置控件样式

Button btn = new Button();
btn.Classes.Add("ImageStyle");
btn.HorizontalAlignment = HorizontalAlignment.Right;
btn.VerticalAlignment = VerticalAlignment.Center;
btn.BorderThickness = new Thickness(0);
btn.BorderBrush = new SolidColorBrush(Colors.Transparent);
btn.Width = 20;
btn.Margin = new Thickness(10, 0, 0, 0);

9-窗体阴影

WPF会提供Effect属性
Avalonia的控件阴影效果只能使用Border上的BoxShadow属性
每个BoxShadow内部属性依次是OffsetX(X轴位移),OffsetY(Y轴位移),Blur(模糊程度),Spread(扩展范围),Color(颜色),IsInset(是否内阴影,此处在XAML上设置无效,需要代码设置)

<Border Height="150" Margin="10" BoxShadow="0 0 10 4 #ccc" />
### Avalonia UI 控件使用教程 #### 了解控件树结构 Avalonia 中的控件树是构建和管理用户界面的基础。理解其结构有助于更高效地进行 UI 开发[^1]。 #### 添加控件到应用程序 要向 Avalonia 应用程序中添加控件,通常会使用 XAML 或 C# 代码来定义布局。下面是一个简单的例子,展示如何在 C# 中初始化并设置一些基本控件: ```csharp using Avalonia; using Avalonia.Controls; class App : Application { public override void Initialize() { Styles.Add(GlobalStyles.Instance); var window = new Window { Title = "My First Avalonia App", Width = 800, Height = 450, Content = new StackPanel { Children = { new TextBlock {Text = "Welcome to Avalonia!"}, new Button { Name="myButton", Content = "Click Me!" } } } }; window.Show(); } static void Main(string[] args) => BuildAvaloniaApp().StartWithClassicDesktopLifetime(args); private static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>().UsePlatformDetect().LogToDebug(); } ``` 这段代码展示了如何创建一个窗口,并在其内部放置两个子控件——`TextBlock` 和 `Button`[^2]。 #### 利用工具提高效率 为了简化开发过程,可以利用 Avalonia 生态系统内的各种辅助工具。例如,VSCode 插件提供了良好的 XAML 编辑体验;而 Avalonia Sketch Exporter 可帮助设计师轻松转换设计稿至可编程格式[^3]。 #### 处理事件 除了静态显示内容外,交互也是 GUI 的重要组成部分之一。可以通过订阅特定类型的事件(如按钮点击)来自定义响应逻辑。这里给出一段简单示例说明如何绑定按钮点击事件处理器: ```csharp // 继续上面的例子,在 button 创建之后立即为其 Click 属性赋值 new Button { Name="myButton", Content = "Click Me!", }.Click += (sender, e) => { MessageBox.Show("You clicked the button!"); }; ``` 以上就是有关 Avalonia UI 控件的一些基础介绍以及实际操作指南。希望这些信息能够帮助读者更好地理解和应用这一强大的跨平台框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值