Mahapps, значки не работают

Публикуя это вместе с GitHub, возможно, кто-то здесь сталкивался с той же проблемой. Я пробовал сегодня с различными вариантами, но не смог заставить это работать.

Я установил MahApps.Metro из самородка. После этого я также установил MahApps.Metro.Resources. Это создало папку с именем resources в моем проекте. Я использую файл icons.xaml в своих ресурсах окна. Я использовал некоторые значки на кнопках своего пользовательского элемента управления (встроенного в главное окно в элементе управления содержимым). Но когда запускаю иконки не появляются. виден только серый кружок.

Я открыл icons.xaml и увидел свойство Fill, где Fill={DynamicResource BlackBrush} содержит ошибку. Если я изменю заливку на Fill="Black", я смогу увидеть значки. Но если акцент темный, это создает проблему, поскольку цвет значков не меняется динамически.

Основываясь на отзывах в GitHub, я попытался создать небольшой образец WPF. Я добавил самородок Mahapps.metro и Mahapps.metro.resources. Я создал окно, перекодировал все MahApps.Metro xaml с ресурсами xaml. Затем я добавил в проект пользовательский элемент управления с теми же ответами. В пользовательском элементе управления я добавил кнопку, а также добавил кнопку в окне. Когда я запускаю образец, я не вижу никаких значков (как в окне, так и под управлением пользователя)

Когда я сравниваю с демонстрационным приложением, я не вижу никакой разницы, кроме того, что в демо у вас есть отдельная библиотека классов для icons.xaml.

Ниже мой код.

Главное окно:

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

Я что-то упустил здесь? • Гирия


person Shankar    schedule 05.11.2015    source источник
comment
Каков путь Resources.xaml?   -  person Saad Abdullah    schedule 05.11.2015
comment
Когда я установил самородок, он создал папку Resources в моем проекте и файл Icons.xaml в этом файле . Я пробовал все эти возможные способы, но ни один из них не работал: 1. ‹ResourceDictionary Source=/TestApp.Demo;component/Resources/Icons.xaml/› 2. ‹ResourceDictionary Source=/Resources/Icons.xaml /› 3. ‹ResourceDictionary Source= pack://application:,,,/TestApp.Demo;component/Resources/Icons.xaml/›   -  person Shankar    schedule 05.11.2015


Ответы (1)


У вас есть 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>
person punker76    schedule 05.11.2015
comment
Работает, спасибо .... Я выбрал подход со статическими ресурсами, когда загружаю окно WPF из другого приложения (размещенного), и у меня нет app.xaml - person Shankar; 06.11.2015