MaterialDesignXamlToolkit с библиотекой классов WPF? - PullRequest
0 голосов
/ 29 мая 2020

Извините за дубликат, но моя низкая репутация не позволяет мне комментировать сообщения.

Я пытаюсь использовать MaterialDesignXamlToolkit с WPF с библиотекой классов, точно так же, как в этом сообщении: Как сделать включить MaterialDesignXamlToolkit в библиотеку классов WPF?

- поэтому я установил NuGet Material Design и добавил ResourceDictionary с именем MaterialDesign.xaml, куда я скопировал и вставил этот код:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
    </ResourceDictionary.MergedDictionaries>

затем я создал новую страницу WPF, на которой я добавил ресурс, поэтому мой xaml выглядит так:

<Page x:Class="test.Page1"
  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:local="clr-namespace:test"
  mc:Ignorable="d" 
  d:DesignHeight="450" d:DesignWidth="800"
  Title="Page1"

  xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
  TextElement.Foreground="{DynamicResource MaterialDesignBody}"
  TextElement.FontWeight="Regular"
  TextElement.FontSize="13"
  TextOptions.TextFormattingMode="Ideal"
  TextOptions.TextRenderingMode="Auto"
  Background="{DynamicResource MaterialDesignPaper}"
  FontFamily="{DynamicResource MaterialDesignFont}">
<Page.Resources>
    <ResourceDictionary Source="/MyAsembly;component/ResourceDictionary/MaterialDesign.xaml" />
</Page.Resources>

<Grid>
    <materialDesign:Card Padding="32" Margin="16">
        <TextBlock Style="{DynamicResource MaterialDesignTitleTextBlock}">My First Material Design App</TextBlock>
    </materialDesign:Card>
</Grid>

Конечно, я получил ошибку: ресурс {MaterialDesignBody, MaterialDesignPaper, MaterialDesignFont} не может быть разрешен

как @ Marija Raki c упоминается в сообщении, я высушил, чтобы добавить фиктивные строки на свой Page1.xaml. cs class

using MaterialDesignColors;
using MaterialDesignThemes.Wpf;
using System.Windows.Controls;


namespace test
{
    /// <summary>
    /// Interaction logic for Page1.xaml
    /// </summary>
    public partial class Page1 : Page
    {
        public Page1()
        {
            ColorZoneAssist.SetMode(new GroupBox(), ColorZoneMode.Accent);
            Hue hue = new Hue("name", System.Windows.Media.Color.FromArgb(1, 2, 3, 4), System.Windows.Media.Color.FromArgb(1, 5, 6, 7));
            InitializeComponent();
        }
    }
}

, но это не помогло. Ошибка все еще существовала. Итак, я попробовал решение @ Trygve и создал еще один класс с именем MaterialDesign.xaml.cs, где я добавил сборку

using System.IO;
using System.Reflection;
using System.Windows;

namespace test
{
    partial class MaterialDesign: ResourceDictionary
    {
        public MaterialDesign() {
            Assembly.LoadFrom(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MaterialDesignThemes.Wpf.dll"));
            Assembly.LoadFrom(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MaterialDesignColors.dll"));
            InitializeComponent();
        }
    }
}

и добавил ссылку на MaterialDesign.xaml:

x:Class="test.MaterialDesign"

, но это тоже не сработало, и упомянутая ошибка все еще существует. Не знаю, где я ошибаюсь ..

Ответы [ 3 ]

1 голос
/ 01 июня 2020

Попробуйте объединить словарный запас ресурса до того, как будет проанализирована разметка XAML:

public partial class Page1 : Page
{
    public Page1()
    {
        Resources.MergedDictionaries.Add(new ResourceDictionary()
        { 
            Source = new Uri("pack://application:,,,/YourAssembly;component/MaterialDesign.xaml") 
        });
        InitializeComponent();
    }
}
0 голосов
/ 06 июня 2020

спасибо @ mm8, я добавил его в page.resources в xaml:

    <Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/pageTest;component/MaterialDesign.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>
0 голосов
/ 01 июня 2020

Вот как я его запускаю:

App.xaml

<ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.DeepPurple.xaml" />
        </ResourceDictionary.MergedDictionaries>

MainWindow.xaml

<Window x:Class="PRWSolution.UI.View.Shell.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:PRWSolution.UI.View"
    xmlns:language="clr-namespace:PRWSolution.UI.Properties.Langs"
    xmlns:setting="clr-namespace:PRWSolution.UI.Properties"
    mc:Ignorable="d"
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
    DataContext="{Binding Main, Source={StaticResource Locator}}"
    TextElement.Foreground="{DynamicResource MaterialDesignBody}"
    Background="{DynamicResource MaterialDesignPaper}"
    TextElement.FontWeight="Medium"
    TextElement.FontSize="14"
    WindowState="Maximized"
    WindowStyle="None"
    FontFamily="{materialDesign:MaterialDesignFont}"
    Title="MainWindow" 
    Height="800" 
    Width="1080">

Также большая помощь - это домашняя страница от MaterialDesign. При соблюдении инструкций он обязательно заработает. Дизайн материалов в XAML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...