2015-02-11 2 views
0

Я начинаю использовать стили в WPF. Я использую стили MahApps в качестве базы, которая до сих пор была действительно хороша. Я смог внести определенные изменения, используя свойство BasedOn.Стиль «Не удается найти ресурс« MetroCheckBox »в MahApps

Одним из простых изменений является добавление поля по умолчанию, поэтому при добавлении элементов управления они не касаются. До сих пор он работал очень хорошо, пока я не попытался использовать MetroCheckBox. С помощью этого конкретного элемента управления он генерирует исключение синтаксиса xaml: «Не удается найти ресурс с именем MetroCheckBox». Имена ресурсов чувствительны к регистру ».

я заглянула в исходном коде, пытаясь отследить этот вопрос и coppied имя непосредственно из 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> 

+1

Помог ли вам MahApps ResourceDictionaries ваш ресурс приложения или окна? –

+0

Да, они выше этого в Application.xaml. CheckBoxes (и все остальные элементы управления) используют стиль отлично, когда я запускаю его без него. Только когда я пытаюсь использовать BasedOn, я получаю эту ошибку. – Joe

+1

@Joe я не могу воспроизвести это с помощью v1.0.0, поэтому какую версию вы используете? – punker76

ответ

1

Я побежал сегодня, и это работает прекрасно:

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

Насколько я могу судить, я не изменил ничего общего с проектом или ссылками.

Однако в последние несколько дней Visual Studio каким-то образом испортила конструктор, бросая исключения слева направо и в центр, разработчик решений не смог отобразить что-либо (был исправлен после очистки кэша компонентов), и NuGet не работает для меня, чтобы проверить версия MahApps.

Поэтому я отправил установщика на ремонт, и теперь стиль отлично работает.

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

1

Вы отсутствует необходимый ResourceDictionary принести в стилях для MahApps. Вы можете сделать, включив определение ResourceDictionary в XAML файла XAML, в котором вы составляете свое представление, или можете добавить его в файл APP.XAML - более поздняя версия даст вам лучшую производительность в краткосрочной перспективе.

Например: здесь MahApps управления XAML в комплекте с другими словарями ресурсов MahApps, то управление 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> 
+0

Извините, я не включил весь код приложения. Я ссылаюсь на все это в области каталогов. Я изменю, чтобы включить это в вопрос – Joe

Смежные вопросы