Использование одной библиотеки классов (и темы) в качестве основы для другой библиотеки классов - PullRequest
0 голосов
/ 15 ноября 2011

Все еще изучаю этот материал на WPF, темах, деривациях и т. Д.

Я понимаю основы "Themes \ Generic.xaml", а затем настраиваю файл app.xaml вашего приложения для включения словаря ресурсов, указывающего на обсуждаемую тему.

Итак, это нормально с точки зрения проекта приложения. Теперь, как насчет из библиотеки классов / DLL-файла. У меня есть проект DLL, который я хочу использовать в качестве основы для всех элементов управления в моем проекте. В этом у меня есть Themes / Generic.xaml, и я закодировал его с некоторыми основами для подтверждения реализации визуального дизайна (первоначально подтверждено нормально, при тестировании в проекте App / exe).

Теперь я хочу эту тему на уровне ДО фактического применения. Опять же, это базовая линия. Теперь я добавляю вторую библиотеку пользовательских сгруппированных элементов управления (например, пользовательский элемент управления для информации об адресе ... несколько строк адреса, город, штат, почтовый индекс, метки и т. Д.). Я хочу, чтобы эта вторая библиотека ссылалась на первую библиотеку с темами, чтобы во время разработки я мог визуально видеть, как она будет выглядеть (выравнивания, цвета, шрифты и т. Д.).

Что / где я должен искать, чтобы одна DLL знала о словарях слияния, лежащих в основе первой DLL. Надеюсь, что это имеет смысл.

- РЕДАКТИРОВАТЬ - для уточнения

Библиотека первого класса ... "MyThemeLibrary" компилируется в .dll В этой dll находится путь / файл "/Themes/MyTheme.xaml"

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

<ResourceDictionary x:Name="MyGenericTheme"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Themes/MyTheme.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Библиотека второго класса ... "SecondLevel" компилируется в .dll В этом у меня есть пользовательский элемент управления, в который я хочу поместить сетку для столбцов / строк, меток и текстовых элементов управления. Я хочу, чтобы элементы управления уважали цвета, шрифты, размеры, выравнивания, как определено в «MyTheme.xaml» первой библиотеки DLL.

<UserControl x:Class="SecondLevel.multipleControlContainer"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >

   <Grid>
      <Grid.ColumnDefinitions>
         <ColumnDefinition />
         <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
         <RowDefinition />
      </Grid.RowDefinitions>

      <Label Content="Something" 
         Grid.Row="0" Grid.Column="0" />

      <TextBox Text="Testing" Grid.Row="1" Grid.Column="1" />
   </Grid>
</UserControl>

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

1 Ответ

1 голос
/ 15 ноября 2011

сделайте ссылку на вашу dll, и если вы знаете, где находится ваша тема, вы можете сделать это

<Application x:Class="My.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <!-- Common base theme -->
        <ResourceDictionary Source="pack://application:,,,/Your.Base.Dll;component/YourResDictionary/YourTheme.xaml" />

        <!-- here comes your custom theme -->

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

сделать это в App.xaml

РЕДАКТИРОВАТЬ после уточнения (см. Комментарии)

<UserControl x:Class="SecondLevel.multipleControlContainer"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <UserControl.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <!-- Common base theme -->
        <ResourceDictionary Source="pack://application:,,,/Your.Base.Dll;component/YourResDictionaryFolder/MyGenericTheme.xaml" />
        <!-- Custom theme -->
        <ResourceDictionary Source="pack://application:,,,/Another.Dll;component/AnotherResDictionaryFolder/MyCustomTheme.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </UserControl.Resources>

  <Grid>
    <!-- all controls in this usercontrol respect the styles in MyGenericTheme.xaml"
         if you use implicite styles-->
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition />
    </Grid.RowDefinitions>
    <Label Content="Something"
           Grid.Row="0"
           Grid.Column="0" />
    <TextBox Text="Testing"
             Grid.Row="1"
             Grid.Column="1" />

    <!-- if you use explicit styles then you must do this -->

    <TextBox Style="{StaticResource myTextBoxStyle}"
             Text="Testing"
             Grid.Row="1"
             Grid.Column="1" />
  </Grid>
</UserControl>
...