Mahapps,图标不工作
Mahapps , icons not working
将此与 GitHub 一起发布,可能这里有人遇到过同样的问题。我今天尝试了各种选择,但无法正常工作。
我已经从 nugget 安装了 MahApps.Metro。之后我也安装了 MahApps.Metro.Resources。这在我的项目中创建了一个名为 resources 的文件夹。我在 window 资源中使用 icons.xaml 文件。我在用户控件的按钮中使用了一些图标(嵌入在内容控件中的主 window 中)。但是当我 运行 图标不出现。只有灰色圆圈可见。
我打开 icons.xaml 并看到 Fill 属性,其中 Fill={DynamicResource BlackBrush} 出错了。如果我将填充更改为 Fill="Black",那么我可以看到图标。但是如果 Accent 是深色的,它会产生一个问题,因为图标颜色不会动态改变。
根据 GitHub 中的反馈,我尝试创建一个小的 WPF 示例。我添加了 nugget Mahapps.metro 和 Mahapps.metro.resources 我创建了一个 window,用资源 xaml 引用了所有 MahApps.Metro xaml。然后我在项目中添加了一个具有相同响应的用户控件。在用户控件中,我添加了一个按钮,并且还在 window 中添加了一个按钮。当我 运行 示例时,我没有看到任何图标(在 window 直接以及在用户控制中)
当我与演示应用程序进行比较时,除了在演示中你有一个单独的 class 库用于 icons.xaml.
之外,我没有发现任何区别。
下面是我的代码。
主要Window:
<Window x:Class="TestApp.Demo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:local="clr-namespace:TestApp.Demo"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<!--<ResourceDictionary Source="pack://application:,,,/TestApp.Demo;component/Resources/Icons.xaml" />-->
<ResourceDictionary Source="/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Width="50"
Height="50"
Style="{DynamicResource MetroCircleButtonStyle}">
<Rectangle Width="20"
Height="20"
Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{DynamicResource appbar_city}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
<local:UCTest Grid.Row="1"/>
</Grid>
</Window>
下面是用户控制代码:
<UserControl x:Class="TestApp.Demo.UCTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="pack://application:,,,/TestApp.Demo;component/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid>
<Button Width="50"
Height="50"
Style="{DynamicResource MetroCircleButtonStyle}">
<Rectangle Width="20"
Height="20"
Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{DynamicResource appbar_city}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
</Grid>
</Grid>
</UserControl>
我是不是漏掉了什么?
•吉里加
您有 2 个选项可以解决您的问题。
第一个选项是使用 StaticResource
而不是 DynamicResource
。
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_city}" />
第二个选项是把你的资源放到App.xaml
,这样你仍然可以使用DynamicResource
。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
将此与 GitHub 一起发布,可能这里有人遇到过同样的问题。我今天尝试了各种选择,但无法正常工作。
我已经从 nugget 安装了 MahApps.Metro。之后我也安装了 MahApps.Metro.Resources。这在我的项目中创建了一个名为 resources 的文件夹。我在 window 资源中使用 icons.xaml 文件。我在用户控件的按钮中使用了一些图标(嵌入在内容控件中的主 window 中)。但是当我 运行 图标不出现。只有灰色圆圈可见。
我打开 icons.xaml 并看到 Fill 属性,其中 Fill={DynamicResource BlackBrush} 出错了。如果我将填充更改为 Fill="Black",那么我可以看到图标。但是如果 Accent 是深色的,它会产生一个问题,因为图标颜色不会动态改变。
根据 GitHub 中的反馈,我尝试创建一个小的 WPF 示例。我添加了 nugget Mahapps.metro 和 Mahapps.metro.resources 我创建了一个 window,用资源 xaml 引用了所有 MahApps.Metro xaml。然后我在项目中添加了一个具有相同响应的用户控件。在用户控件中,我添加了一个按钮,并且还在 window 中添加了一个按钮。当我 运行 示例时,我没有看到任何图标(在 window 直接以及在用户控制中)
当我与演示应用程序进行比较时,除了在演示中你有一个单独的 class 库用于 icons.xaml.
之外,我没有发现任何区别。下面是我的代码。
主要Window:
<Window x:Class="TestApp.Demo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:local="clr-namespace:TestApp.Demo"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<!--<ResourceDictionary Source="pack://application:,,,/TestApp.Demo;component/Resources/Icons.xaml" />-->
<ResourceDictionary Source="/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Width="50"
Height="50"
Style="{DynamicResource MetroCircleButtonStyle}">
<Rectangle Width="20"
Height="20"
Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{DynamicResource appbar_city}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
<local:UCTest Grid.Row="1"/>
</Grid>
</Window>
下面是用户控制代码:
<UserControl x:Class="TestApp.Demo.UCTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="pack://application:,,,/TestApp.Demo;component/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid>
<Button Width="50"
Height="50"
Style="{DynamicResource MetroCircleButtonStyle}">
<Rectangle Width="20"
Height="20"
Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{DynamicResource appbar_city}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
</Grid>
</Grid>
</UserControl>
我是不是漏掉了什么? •吉里加
您有 2 个选项可以解决您的问题。
第一个选项是使用 StaticResource
而不是 DynamicResource
。
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_city}" />
第二个选项是把你的资源放到App.xaml
,这样你仍然可以使用DynamicResource
。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>