3

Мне нужно разделить стили приложений на несколько файлов xaml. Но мне также нужно определить некоторые общие ценности, какwinrt xaml объединил ресурсы

<x:Double x:Key="SharedValue">100</x:Double> 

в одном файле для использования этого значения стилей, определенных в других файлах. Например:

<Style x:Name="SomeStyle" TargetType="TextBox"> 
    <Setter Property="Width" Value="{StaticResource SharedValue}"/> 
</Style> 

и в другом словаре ресурс файла:

<Style x:Name="AnotherStyle" TargetType="Button"> 
    <Setter Property="Height" Value="{StaticResource SharedValue}"/> 
</Style> 

Но когда я пытаюсь определить объединенный словарь ресурсов в App.xaml подать

<Application.Resources> 
    <ResourceDictionary > 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="DefinedValues.xaml"/> 
      <ResourceDictionary Source="Styles1.xaml"/> 
      <ResourceDictionary Source="Styles2.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Я получаю эту среду выполнения исключение: «Сообщение =» Не удается найти ресурс с именем/ключом SharedValue »

Можете ли вы сказать мне, возможно ли это сделать и что я делаю неправильно? Спасибо.

+0

Где вы видите сообщение? Вы пытаетесь получить доступ к ресурсу в XAML с помощью {StaticResource}? –

+0

Я получаю эту ошибку, когда она обрабатывается в файле App.g.i.cs как необработанное исключение во время выполнения, но intelisence не освещают мою SharedValue как непризнанную в любом месте. –

+0

Да, это возможно, и я смог создать приложение, используя ваш пример, и он работает над моим проектом. Уверены ли вы, что у вас есть правильный путь к DefinedValues.xaml и двум другим ResourceDictionaries в вашем файле App.xaml? –

ответ

9

Использование объединенных словарей может стать немного сложным, если у вас есть зависимости между другими объединенными словарями.

Когда у вас есть несколько ресурсов области приложения, порядок объявления является важным. Они разрешены в обратном порядке объявления, поэтому в вашем случае вы должны иметь заказ.

<Application.Resources> 
<ResourceDictionary > 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Styles1.xaml"/> 
     <ResourceDictionary Source="Styles2.xaml"/> 
     <ResourceDictionary Source="DefinedValues.xaml"/> 

    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Кроме того, вам может понадобиться, чтобы ссылаться на другие ResourceDictionary в Styles1.xaml. Это сработало для меня в Styles1.xaml.

<ResourceDictionary "..."> 

    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="SharedValues.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 

    <Style x:Name="AnotherStyle" 
     TargetType="Button"> 
    <Setter Property="Height" 
      Value="{StaticResource SharedValue}" /> 
    </Style> 
</ResourceDictionary> 
+0

Спасибо, это именно то, что я искал! –

+0

FYI, когда вы получите приемлемый ответ, вы можете перенести ответ, но вы также должны «принять» ответ. Таким образом ваша репутация на StackOverflow повышается, и люди с большей вероятностью помогут вам в будущем. –

+0

См. Http://stackoverflow.com/faq#howtoask для получения дополнительной информации по вопросам. –