В WPF, как я могу сделать перекрестную ссылку на ресурсы между ResourceDictionaries? - PullRequest
1 голос
/ 28 октября 2010

Я работаю над проектом WPF со многими элементами UserControls и пытаюсь придать здравый смысл своим ресурсам WPF.

Базовый файл содержит общие элементы, необходимые для всех представлений, такие как цвета:

<!-- Resources.xaml -->
<Color x:Key="FlashOrange">#F59500</Color>

Затем файл ресурса, относящийся к представлению, должен ссылаться на FlashOrange:

<!-- ContactViewResources.xaml -->
<DataTrigger Binding="{Binding IsActiveConversation}" Value="True">
    <Setter Property="Background" Value="{StaticResource FlashOrange}"/>
</DataTrigger>

Наконец, я хотел бы включить оба элемента в свой UserControl.К сожалению, при таком подходе я получаю исключение о том, что {StaticResource FalshOrange} не определен.

<!-- ContactView.xaml -->
<UserControl.Resources>        
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="..\Resources.xaml"/>
            <ResourceDictionary Source="ContactViewResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>     
</UserControl.Resources>

Все файлы представлений находятся в одной сборке DLL, а отдельная сборка EXE запускается

Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Либо объедините Resources.xaml с ContactViewResources.xaml, чтобы у статической ссылки был прямой путь к FlashOrange в своем дереве ресурсов во время загрузки, либо используйте вместо этого DynamicResource.

1 голос
/ 30 мая 2012

Чтобы ссылаться на один ResourceDictionary в другом, используйте свойство MergedDictionary ResourceDictionary, для которого вы хотите сохранить ссылку.В вашем случае:

<!-- ContactViewResources.xaml -->
<ResourceDictionary ...>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="..\Resources.xaml"/>
    </ResourceDictionary.MergedDictionaries>  
    ...  
</ResourceDictionary>
...