Avalonia MVVM项目中Material Icons无法显示问题求助
解决Avalonia中Material.Icons.Avalonia图标不显示问题
我已为Avalonia MVVM项目安装Material.Icons.Avalonia NuGet包,但在Button组件中嵌入MaterialIcon时,按钮上未呈现任何图标,仅显示空白按钮。
问题代码
MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="using:SharpDesktop.ViewModels" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="SharpDesktop.Views.MainWindow" x:DataType="vm:MainWindowViewModel" Icon="/Assets/avalonia-logo.ico" Title="SharpDesktop" WindowStartupLocation="CenterScreen" ExtendClientAreaToDecorationsHint="True" ExtendClientAreaChromeHints="NoChrome" ExtendClientAreaTitleBarHeightHint="-1"> <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> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- 标题栏 --> <Border Grid.Row="0" Height="60" Background="Pink" x:Name="TitleBar" Padding="16" > <DockPanel LastChildFill="False"> <DockPanel Dock="Right"> <StackPanel Orientation="Horizontal"> <Button> <materialIcons:MaterialIcon Kind="ExitRun"/> </Button> </StackPanel> </DockPanel> </DockPanel> </Border> <!-- 内容区域 --> <Border Grid.Row="1"> </Border> </Grid> </Window>
App.axaml
<Application xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SharpDesktop.App" xmlns:local="using:SharpDesktop" xmlns:themes="clr-namespace:Material.Styles.Themes;assembly=Material.Styles" xmlns:dialogHost="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia" xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" RequestedThemeVariant="Default"> <!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. --> <Application.DataTemplates> <local:ViewLocator/> </Application.DataTemplates> <Application.Styles> <themes:MaterialTheme BaseTheme="Dark" PrimaryColor="Purple" SecondaryColor="Lime"/> <materialIcons:MaterialIconStyles/> <materialIcons:MaterialIconExt/> </Application.Styles> </Application>
解决方法
- 确认图标Kind枚举值正确性:检查
ExitRun是否为Material.Icons.Avalonia支持的图标名称。部分图标名称可能存在拼写或命名差异,比如常见的退出图标应为ExitToApp,可通过IDE智能提示或官方文档核对枚举列表。 - 调整按钮与图标尺寸:默认Button的内边距可能过大,或图标尺寸太小导致无法显示。尝试给Button设置
Padding="0",同时为MaterialIcon指定明确的宽高:
<Button Padding="0" Width="32" Height="32"> <materialIcons:MaterialIcon Kind="ExitToApp" Width="20" Height="20"/> </Button>
- 优化样式加载配置:移除App.axaml中的
MaterialIconExt,部分版本中该扩展样式可能与现有主题冲突,仅保留MaterialIconStyles即可:
<Application.Styles> <themes:MaterialTheme BaseTheme="Dark" PrimaryColor="Purple" SecondaryColor="Lime"/> <materialIcons:MaterialIconStyles/> </Application.Styles>
- 验证NuGet版本兼容性:确保Material.Icons.Avalonia的版本与项目使用的Avalonia版本匹配。例如Avalonia 11.x需要对应版本的图标库版本,版本不兼容会导致渲染失败。
- 清理重建项目:清理解决方案(Clean Solution)后重新生成(Rebuild Solution),或重启IDE,避免缓存导致资源未正确加载。
内容的提问来源于stack exchange,提问作者Furry_Monster
相关产品推荐
相关产品推荐

