кода - returns c#



Настройте ресурсы приложения из кода (2)

У меня есть проект ac #, который был приложением WPF, но теперь я хочу построить его как dll. Ранее я делал это, удаляя app.xaml из проекта и устанавливая тип его сборки на dll.

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

XAML, который я пытаюсь эмулировать в коде:

<Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Resources/Styles/Shared.xaml"/>
        <ResourceDictionary Source="Resources/Styles/ToolBar.xaml"/>
        <ResourceDictionary Source="Resources/Styles/GroupBox.xaml"/>
        <ResourceDictionary Source="Resources/Styles/ZoomBox.xaml"/>
        <ResourceDictionary Source="Resources/Styles/ScrollBar.xaml"/>
        <ResourceDictionary Source="Resources/Styles/Expander.xaml"/>
        <ResourceDictionary Source="Resources/ApplicationToolbar.xaml"/>
        <ResourceDictionary Source="Resources/DesignerItem.xaml"/>
        <ResourceDictionary Source="Resources/Styles/ToolboxItem.xaml"/>
        <ResourceDictionary Source="Resources/Styles/Toolbox.xaml"/>
        <ResourceDictionary Source="Resources/Connection.xaml"/>
        <ResourceDictionary Source="Resources/Slider.xaml"/>
        <ResourceDictionary Source="Resources/ScrollViewer.xaml"/>
        <ResourceDictionary Source="Resources/StatusBar.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>

Вот код, который у меня есть:

ResourceDictionary myResourceDictionary = new ResourceDictionary();
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\Shared.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\ToolBar.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\GroupBox.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\ZoomBox.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\ScrollBar.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\Expander.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\ApplicationToolbar.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\DesignerItem.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\ToolboxItem.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Styles\\Toolbox.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Connection.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\Slider.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\ScrollViewer.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
            myResourceDictionary.Source = new Uri("C:\\Resources\\StatusBar.xaml");
            Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);

Должно ли это работать?

Я столкнулся с проблемой в том, что Toolbar.xaml ссылается на ресурс, объявленный в Shared.xaml, но его не поднимают, и я получаю следующую ошибку

Cannot find resource named 'ToolbarSelectedBackgroundBrush'. Resource names are case sensitive.

Вот где ресурс делится в shared.xaml

<LinearGradientBrush x:Key="ToolbarSelectedBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
    <GradientBrush.GradientStops>
      <GradientStopCollection>
        <GradientStop Color="#FFFEE3" Offset="0.0"/>
        <GradientStop Color="#FFE797" Offset="0.4"/>
        <GradientStop Color="#FFD750" Offset="0.4"/>
        <GradientStop Color="#FFE796" Offset="1.0"/>
      </GradientStopCollection>
    </GradientBrush.GradientStops>
  </LinearGradientBrush>

и вот где его ссылка в toolbar.xaml

<Setter TargetName="Border" Property="Background" Value="{StaticResource ToolbarSelectedBackgroundBrush}" />

Извините за сочинение вопроса, но думал, что предоставил как можно больше информации. Позвольте мне знать, если вам нужно что-нибудь еще.


Answer #1

Вы должны создать отдельный файл ResourceDictionary, например Style.xaml, который содержит (не забывайте пространства имен)

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Resources/Styles/Shared.xaml"/>
    <ResourceDictionary Source="Resources/Styles/ToolBar.xaml"/>
    <ResourceDictionary Source="Resources/Styles/GroupBox.xaml"/>
    <ResourceDictionary Source="Resources/Styles/ZoomBox.xaml"/>
    <ResourceDictionary Source="Resources/Styles/ScrollBar.xaml"/>
    <ResourceDictionary Source="Resources/Styles/Expander.xaml"/>
    <ResourceDictionary Source="Resources/ApplicationToolbar.xaml"/>
    <ResourceDictionary Source="Resources/DesignerItem.xaml"/>
    <ResourceDictionary Source="Resources/Styles/ToolboxItem.xaml"/>
    <ResourceDictionary Source="Resources/Styles/Toolbox.xaml"/>
    <ResourceDictionary Source="Resources/Connection.xaml"/>
    <ResourceDictionary Source="Resources/Slider.xaml"/>
    <ResourceDictionary Source="Resources/ScrollViewer.xaml"/>
    <ResourceDictionary Source="Resources/StatusBar.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

конец ссылки это во всех ваших элементах управления


Answer #2

Этот код работает для меня. Просто изменил URIS на относительный:

ResourceDictionary myResourceDictionary = new ResourceDictionary();

myResourceDictionary.Source = new Uri("Dictionary1.xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);

myResourceDictionary.Source = new Uri("Dictionary2.xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);




resources