首页 > 解决方案 > 使用 VS Styles 的 Mahapps 抛出 IOException

问题描述

我在我的 WPF 应用程序中使用 Mahapps Tabcontrol。当我使用默认样式时效果很好,如果我尝试在 App.xaml 中使用 VS 样式:

<Application x:Class="UI.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:system="clr-namespace:System;assembly=mscorlib"
         xmlns:vm="clr-namespace:UI.ViewModel"
         xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
         xmlns:local="clr-namespace:UI"
         StartupUri="MainWindow.xaml">

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
            <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" />
            <!-- Accent and AppTheme setting -->
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Teal.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Colors.xaml" />
            <!-- Icons -->
            <ResourceDictionary x:Name="IconsDictionary" Source="Resources/Dictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <system:Double x:Key="WindowTitleFontSize">16</system:Double>
        <FontFamily x:Key="HeaderFontFamily">Segoe UI</FontFamily>
        <vm:ViewModelLocator x:Key="MainLocator"/>
    </ResourceDictionary>
</Application.Resources>

...它抛出一个错误:IOException: Cannot locate resource 'styles/vs/controls.xaml'

如果我从 App.xaml 中删除 VS/Styles 引用,则应用程序会编译。

标签: c#wpftabcontrolmahapps.metro

解决方案


找到了解决办法!

首先,从 App.xaml 中删除 VS/Styles:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            
            <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
            <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" />
            <!-- Accent and AppTheme setting -->
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Teal.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
            <!-- Icons -->
            <ResourceDictionary x:Name="IconsDictionary" Source="Resources/Dictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

其次,将其移至 Window.Resources 下的 MainWindow.xaml:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Colors.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

在这里找到修复资源未在“Styles\VS\Colors.xaml”中定义


推荐阅读