Как неявно применить тему в конструкторе компонентов так же, как в конструкторе проекта приложения? - PullRequest
0 голосов
/ 02 ноября 2010

Допустим, у меня был файл темы Button.xaml для стандартной кнопки.

При слиянии со словарем ресурсов приложения он может неявно применяться в конструкторе проекта приложения.

Но после того, как я переместил Button.xaml в проект компонента, разработчик проекта компонента не может неявно применить файл темы.

Как я могу заставить этот файл темы работать неявно в компонентном проекте?

Обновление: Themes.xaml следующим образом

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes/Shared.xaml" />
    <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes/Button.xaml" />
    <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes/ComboBox.xaml" />
...




<Application x:Class="ButtonStyleTest.App" 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
        <ResourceDictionary> 
            <ResourceDictionary.MergedDictionaries> 
                <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes.xaml"/> 
            </ResourceDictionary.MergedDictionaries> 
        </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Если я использую объединенный Theme.xaml, кнопка выглядит нормально в конструкторе, но не работает во время выполнения. Но если я объединю Button.xaml и ComboBox по одному, это будет нормально как для дизайна, так и для времени выполнения.

1 Ответ

0 голосов
/ 02 ноября 2010

Новый пример.

Скажите, что у вас есть библиотека с именем StyleLibrary.
В этой библиотеке у вас есть ResourceDictionary с именем Button.xaml, который выглядит следующим образом

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type Button}" >
        <Setter Property="Width" Value="75" />
        <Setter Property="Height" Value="23" />
    </Style>
</ResourceDictionary>

ВПриложение, затем мы добавляем ссылку на StyleLibrary и в App.xaml мы добавляем это.

<Application x:Class="ButtonStyleTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Button.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Этот стиль будет применяться в приложении и в библиотеках как во время выполнения, так и в конструкторе.

Слева мое главное окно.Is имеет одну собственную кнопку, а затем UserControl из TestLibrary с двумя кнопками.Справа находится Окно из TestLibrary, которое содержит один UserControl из TestLibrary, и кажется, что для всех кнопок применяется стиль.

alt text

...