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>