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" />