簡體   English   中英

在 MahApps 中樣式“找不到資源 'MetroCheckBox'”

[英]Style “Cannot find resource 'MetroCheckBox'” in MahApps

我開始在 WPF 中使用樣式。 我使用 MahApps 樣式作為基礎,到目前為止它非常好。 我已經能夠使用 BasedOn 屬性進行特定修改。

更簡單的更改之一是添加默認邊距,以便在添加控件時它們不會觸摸。 在我嘗試使用 MetroCheckBox 之前,它運行得非常好。 使用此特定控件,它會引發 xaml 解析異常:“找不到名為‘MetroCheckBox’的資源。資源名稱區分大小寫。”

我查看了源代碼,試圖追蹤這個問題並直接從 GitHub 復制名稱:

https://github.com/MahApps/MahApps.Metro/blob/master/MahApps.Metro/Styles/Controls.CheckBox.xaml

毫無疑問,我所有其他控件都可以正常工作:

        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource MetroButton}">
            <Setter Property="Margin" Value="2"/>
        </Style>

        <Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource MetroComboBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>

        <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource MetroCheckBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>

        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource MetroTextBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>

有想法該怎么解決這個嗎?

請注意,我包括對樣式的引用,如下所示:

<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:extra="http://schemas.extra.com/ui"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:visualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:Primitives="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
xmlns:Custom="http://metro.mahapps.com/winfx/xaml/controls"
x:Class="MyApp.App"
StartupUri="/MyApp;component/GUI/Window/Window3.xaml"
>

<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/BaseDark.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource MetroButton}">
            <Setter Property="Margin" Value="2"/>
        </Style>

        <Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource MetroComboBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>

        <!--<Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource MetroCheckBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>-->

        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource MetroTextBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>

        <!--Chart Style-->
        <Style TargetType="{x:Type chartingToolkit:Chart}
    ...
        </Style>

        <!--Top Tab Item-->
        <Style x:Key="TopTabItemStyle" TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
            ...
        </Style>

        <!--Tab Item-->
        <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource MetroTabItem}">
    ...
        </Style>

        <!-- Group Box-->
        <Style TargetType="{x:Type GroupBox}" BasedOn="{StaticResource MetroGroupBox}">
            <!--<Setter Property="Margin" Value="5"/>
            <Setter Property="Padding" Value="5"/>
            <Setter Property="Foreground" Value="{DynamicResource BlackBrush}"/>
            <Setter Property="Background" Value="{DynamicResource AccentColorBrush}"/>
            <Setter Property="BorderBrush" Value="{DynamicResource AccentColorBrush}"/>
            <Setter Property="Custom:ControlsHelper.HeaderFontSize" Value="{DynamicResource ContentFontSize}"/>
            <Setter Property="Custom:GroupBoxHelper.HeaderForeground" Value="{x:Null}"/>-->
            <Setter Property="Custom:ControlsHelper.HeaderFontWeight" Value="SemiBold"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupBox}">
                        <Grid x:Name="GroupBoxRoot">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,0,0,2" Background="Transparent" Grid.Row="0">
                                <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" TextElement.FontWeight="{TemplateBinding Custom:ControlsHelper.HeaderFontWeight}" TextElement.FontStretch="{TemplateBinding Custom:ControlsHelper.HeaderFontStretch}" TextElement.FontSize="{TemplateBinding Custom:ControlsHelper.HeaderFontSize}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True"/>
                            </Border>
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Background="Transparent" Grid.Row="1">
                                <ContentPresenter Cursor="{TemplateBinding Cursor}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
</Application.Resources>

您缺少引入 MahApp 樣式所需的 ResourceDictionary。 您可以通過將 ResourceDictionary 定義包含在您正在編寫視圖的 XAML 文件的 XAML 中來實現,也可以將其添加到 APP.XAML 文件中 - 后者將在短期內為您提供更好的性能。

例如:這里是包含在其他 MahApps 資源詞典中的 MahApps 控件 xaml,在這種情況下,控件 xaml 是您需要的:

<Application x:Class="MyApp"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <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.MergedDictionaries>

        </ResourceDictionary>       

    </Application.Resources>
</Application>

我今天運行它,它工作正常:

        <Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource MetroComboBox}">
            <Setter Property="Margin" Value="2"/>
        </Style>

據我所知,我沒有改變與項目或參考資料無關的內容。

然而,在過去的幾天里,Visual Studio 以某種方式損壞了,設計器在左側和中間拋出異常,解決方案資源管理器無法顯示任何內容(在清除組件模型緩存后已修復)並且 NuGet 無法為我檢查 MahApps 版本。

所以我在修復安裝時啟動了安裝程序,現在樣式工作正常。

我不知道這些是否相關……但它們可能是,所以我會把它留作答案,以防其他人遇到同樣的問題。

如果您從 2.0 之前的 MahApps 版本升級到更新的版本,則可能會導致這種情況。

有關更多詳細信息,請參閱:mahapps.com:遷移到 v2.0 - MahApps.Metro https://mahaps.com/docs/guides/migration-to-v2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM