2013-11-14 4 views
0

Я попытался добавить все свои ресурсы в файл шаблона ресурса и включить их в динамические ресурсы (точно так же, как Blend делает это тоже). Программа компилируется и работает нормально, но стили вообще не применяются. Причудливо, они применяются в предварительном просмотре, однако. Это код, у меня есть:Почему ресурсы стиля из ResourceDictionary не применяются?

// MyUserControl.xaml 
<UserControl x:Class="MyProject.MyUserControl" 
     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" mc:Ignorable="d" 
     d:DesignHeight="411" d:DesignWidth="645"> 
    <Grid> 
     <Button Content="Click here" Style="{DynamicResource MyButtonStyle}" />     
    </Grid> 
</UserControl> 

-

// MyStyleTemplates.xaml 
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
        <GradientStop Color="#FF263B5B" Offset="0"/> 
        <GradientStop Color="#FF65FD43" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

-

// App.xaml 
<Application x:Class="MyProject.App" 
      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="/MyProject;component/MyStyleTemplates.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Я попытался сделать то же самое, но затем положить Style код в <UserControl.Resources> тега в MyUserControl.xaml файл, и это отлично сработало, поэтому в самом стиле ничего не происходит. Почему это происходит?

Edit:

Как это может иметь что-то делать с этим, структура папок может быть немного нетрадиционный, следующим образом:

MyProjectFolder/
    MyProject.csproj 
    MyStyleTemplates.xaml 
    Main/
     App.xaml 
    GUI/
     MyUserControl.xaml 
     MyUserControl.xaml.cs 

это позволило ли?

+0

Попробуйте использовать StaticResource, а не Dynamicresource –

+1

Я не смог воспроизвести проблему с кодом, представленным здесь. Является ли ресурсный словарь MyStyleTemplates в той же сборке, что и app.xaml? Вы используете UserControl? –

+0

Использование 'StaticResource' приводит к сбою программы. Я обновил вопрос и включил структуру файла. Есть ли там вещи, которые не допускаются? – Yellow

ответ

0

Причина заключалась в том, что я хотел, чтобы определить свой собственный Main() метод, поэтому я изменил App.xaml файл тег в файле .csproj от ApplicationDefition к просто Page. Это работает, но НЕ, если вы также хотите использовать ресурсы так, как описано выше.

Единственная проблема в том, что VS не предупреждает вас об этом и даже показывает предварительный просмотр правильно. Изменение тега на ApplicationDefition решает проблему, хотя тогда вам нужно найти другой способ определения собственного основного метода.

0

В вашем App.xaml изменить ResourceDictionary сливаются ниже

<ResourceDictionary Source="pack://application:,,,/MyProject;component/MyStyleTemplates.xaml"/> 
+0

То же самое: предварительный просмотр верен и компилируется, но фактическое приложение не меняет внешний вид. Не могли бы вы быть более конкретными в отношении того, что должно делать это дополнение? – Yellow

+3

Зачем снижать этот ответ? Что в этом плохого? Это может быть не идеальный ответ, и я не буду его выдвигать, но почему downvote?+1 для компенсации ... – gehho

+0

Я не имею в виду никакого нарушения, но ответ не является конструктивным, на самом деле не помог, не дает объяснений, почему данное решение должно помочь, и, наконец, это точно то же самое как ответ, приведенный здесь (http://stackoverflow.com/questions/338056/resourcedictionary-in-a-separate-assembly), который я уже пробовал. Поэтому я не хочу, чтобы кто-либо, испытывавший ту же проблему, думал, что это правильное решение. – Yellow

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