2015-03-19 3 views
0

Я хотел бы знать, можно ли использовать несколько ресурсов для таргетинга одного и того же элемента или элемента управления в WPF? Я заметил, что каскад файла XAML и следующий файл XAML в списке ресурсов обгонят следующий, если та же самая цель нацелена.WPF: используйте несколько ресурсов для таргетинга одного элемента или элемента управления

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

В моей App.xaml области Мои ресурсы следующим образом:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Views/LayoutAndPositioning/LayoutAndPositioning.xaml"/> 
      <ResourceDictionary Source="/Views/Theme/DefaultColors.xaml"/> 

     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

LayoutAndPositioning.xaml для элемента

<Style x:Key="MyElement" TargetType="{Rectangle}"> 
    <Setter Property="Margin" Value="200,200,200,200" /> 
</Style> 

DefaultColors.xaml для элемента

<Style x:Key="MyElement" TargetType="{Rectangle}"> 
    <Setter Property="Fill" Value="Green" /> 
    <Setter Property="Width" Value="400" /> 
    <Setter Property="Height" Value="200" /> 
</Style> 

Но когда я пытаюсь настроить та же часть в двух разных файлах. LayoutAndPositioning.xaml, который является первым в списке, не применяется к элементу, поскольку DefaultColors.xaml не имеет в нем стилей позиции. DefaultColors.xaml не имеет поля, поэтому мой элемент просто не имеет свойства margin.

Я тестировал извлечение DefaultColors.xaml из списка ресурсов App.xaml и возвращает позиционирование. Так что это похоже на каскадную вещь.

Есть ли у кого-нибудь идеи, если можно нацелить один и тот же элемент в 2 разных файлах Xaml.

+0

Вы пытались переименовать MyElement в MyNewElement в DefaultColors, чтобы избежать имен colisions, а затем сделать MyNewElement быть 'BasedOn = "{StaticResource MyElement}"' и объединить LayoutAndPositioning.xaml в Словарь по умолчаниюColors.xaml –

ответ

0

Попробуйте сделать следующее:

  • Merge LayoutAndPositioning.xaml в DefaultColors.xaml, выполнив следующие действия на ор DefaultColors.xaml

    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Views/LayoutAndPositioning/LayoutAndPositioning.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    
  • Удалить LayoutAndPositioning.xaml из вашего приложения . Источники

Затем изменение:

<Style x:Key="MyElement" TargetType="{Rectangle}"> 
    <Setter Property="Fill" Value="Green" /> 
    <Setter Property="Width" Value="400" /> 
    <Setter Property="Height" Value="200" /> 
</Style> 

Для

 <Style x:Key="RectStyle" TargetType="{Rectangle}" basedOn="{StaticResource MyElement}"> 
     <Setter Property="Fill" Value="Green" /> 
     <Setter Property="Width" Value="400" /> 
     <Setter Property="Height" Value="200" /> 
    </Style> 
+0

Имеет смысл. Я тоже нашел это решение. Я обнаружил, что вы можете иметь как отдельные, так и «basedOn» все еще работает с файлами. Я не знал, был ли какой-то другой способ, не используя baseOn, но это не похоже на случай в WPF. Ну что ж. Благодарю. – ClosDesign