1.ResourceDictionary文件报错“Unable to cast object of type ‘Avalonia.Controls.ResourceDictionary’ to type ‘Avalonia.Controls.Control’”
解决方法:因为这些文件不能被转换成控件,所以不能被预览,这时候按下功能键F7,切换到“XAML View”,就能消除这个报错。
2.应用阿里巴巴IconFont
2.1. 应用
2.1.1 首先下载iconfont文件,并添加到项目
2.1.2在App.axaml文件中引入字体
<Application.Resources>
<ResourceDictionary>
<FontFamily x:Key="IconFont">/Assets/Fonts/#iconfont</FontFamily>
</ResourceDictionary>
</Application.Resources>
2.1.3应用
<TextBlock
FontFamily="{StaticResource IconFont}"
FontSize="30"
Foreground="white"
Text="" />
2.2 坑
如果在样式文件中定义了Textblock的样式,像这样
<Style Selector="TextBlock.Manual">
<Setter Property="Text" Value="" />
</Style>
并在App.axaml文件中引入
<Application.Styles>
<StyleInclude Source="/Styles/WpTextBlock.axaml" />
<FluentTheme Mode="Dark" />
</Application.Styles>
像下面这样应用是没问题的
<TextBlock
Classes="Manual"
FontFamily="{StaticResource IconFont}"
FontSize="30"
Foreground="white" />
**但是,未使用样式文件中样式的其他TextBlock将不会显示。就算像下面这样写也不会显示不是不会显示,是会被覆盖掉!!! **
<TextBlock
FontFamily="{StaticResource IconFont}"
FontSize="30"
Foreground="white"
Text="" />
不过,Label可以显示
3.深入浅出Avalonia.Xaml.Behaviors
avalonia ui控件事件转命令包
项目地址
Nuget包地址
安装指令:
dotnet add package Avalonia.Xaml.Behaviors --version 11.0.0-preview4
3.1应用实例:
一、前端:
首先引入命名空间
xmlns:i="clr-namespace:Avalonia.Xaml.Interactivity;assembly=Avalonia.Xaml.Interactivity"
xmlns:ia="clr-namespace:Avalonia.Xaml.Interactions.Core;assembly=Avalonia.Xaml.Interactions"
将事件转为命令
<TreeView x:Name="Navigation"
Classes="navigation">
<TreeViewItem Classes="navigation"
Header="选项1">
<TreeViewItem Classes="navigation"
Header="选项12" />
<TreeViewItem Classes="navigation"
Header="选项13" />
</TreeViewItem>
<TreeViewItem Classes="navigation"
Header="选项2" />
<TreeViewItem Classes="navigation"
Header="选项3" />
<i:Interaction.Behaviors>
<ia:EventTriggerBehavior EventName="PointerReleased">
<ia:InvokeCommandAction Command="{Binding NavigationItemClickCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=SelectedItem}" />
<!--<ia:InvokeCommandAction Command="{Binding NavigationItemClickCmd}"
CommandParameter="{Binding ElementName=Navigation,Path=SelectedItem}" />这样也是ok的
-->
</ia:EventTriggerBehavior>
</i:Interaction.Behaviors>
</TreeView>
二、后端
private ICommand _navigationItemClickCmd;
public ICommand NavigationItemClickCmd
{
get
{
_navigationItemClickCmd = ReactiveCommand.Create<TreeViewItem>(tvi =>
{
if (tvi is not null)
{
tvi.IsExpanded = !tvi.IsExpanded;
}
});
return _navigationItemClickCmd;
}
}
}