powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как в библиотеке использовать стиль из словаря ресурсов?
4 сообщений из 4, страница 1 из 1
Как в библиотеке использовать стиль из словаря ресурсов?
    #38473616
Hobotanius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил сделать библотеку вспомогательных окон:
1. Создал проект библиотека классов, библиотека контролов.
2. Создал в библиотеке класс MessageBox : Window (частичный класс в двух файлах cs и xaml)
3. В этом же решении создал проект - WPF-приложение для тестирования классов библиотеки, настроил ссылки.
4. В окне приложения разместил кнопку - в обработчике клика вызываю MessageBox из моей библиотеки.
Всё отработало хорошо, решил стиль окна MessageBox вынести в словарь ресурсов - чтоб использовать повторно код и иметь возможность централизовано менять стиль всех окон.
5. Добавил в проект библиотеки словарь ресурсов xaml.
6. Перенёс в словарь стиль окна MessageBox.
Вот так выглядит словарь:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style 
        x:Key="Window"
        TargetType="{x:Type Window}" >
        <Setter Property="Background" Value="#FFF0F0F0" />
        <Setter Property="ResizeMode" Value="NoResize" />
        <Setter Property="SizeToContent" Value="WidthAndHeight" />
        <Setter Property="ShowInTaskbar" Value="False" />
        <Setter Property="HorizontalContentAlignment" Value="Center" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="HorizontalAlignment" Value="Center" />
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>

</ResourceDictionary>



Вот так выглядит MessageBox.xaml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<Window x:Class="SystemWindowsLibrary.MessageBox"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MessageBox">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="8"></RowDefinition>
            <RowDefinition Height="Auto" MinHeight="30"></RowDefinition>
            <RowDefinition Height="8"></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
            <RowDefinition Height="8"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="8"></ColumnDefinition>
            <ColumnDefinition Width="Auto" MinWidth="100"></ColumnDefinition>
            <ColumnDefinition Width="8"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <TextBox Grid.Column="1" Grid.Row="1" Name="textBlockMessage" TextWrapping="Wrap" AcceptsReturn="True" MaxWidth="800" MaxHeight="800" IsReadOnly="True" Background="#FFF0F0F0" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Center" VerticalAlignment="Top" />

        <DockPanel Grid.Column="1" Grid.Row="3" >
            <Button Content="Ok" Name="buttonOk" Click="buttonOk_Click" MaxWidth="80" MinWidth="80" />
        </DockPanel>

    </Grid>
</Window>


В этом файле пытаюсь использовать стиль из словаря - внутри первого тега Window пишу:
Код: xml
1.
2.
3.
4.
5.
6.
<Window x:Class="SystemWindowsLibrary.MessageBox"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MessageBox"
        Style="{StaticResource Window}"
        >



Но увы здесь - System.Windows.Markup.XamlParseException - Не удается найти ресурс с именем "Window".

Конечно если ссылку на словарь ресурсов прописать в App.xaml, то всё сразу обнаруживается и работает, но это не совсем то,
что хотелось - как-то неудобно подключать библиотеку, а потом ещё и стили для нее прописывать.
Как бы стили сделать встоенными в библиотеку и ссылаться на эти стили из самой библиотеки?
...
Рейтинг: 0 / 0
Как в библиотеке использовать стиль из словаря ресурсов?
    #38473698
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hobotanius,

1. В библиотеке создать еще один ResourceDictionary, в него собрать ресурсы из всех имеющихся в библиотеке словарей:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d">

  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/MyStyleLibrary;component/MyMessageBox.xaml" />
    <ResourceDictionary Source="/MyStyleLibrary;component/SomeOther.xaml" />
    .................
  </ResourceDictionary.MergedDictionaries>

</ResourceDictionary>


В App.xaml прописать ссылку на этот один общий файл:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<Application
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  
  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/MyStyleLibrary;component/AllStyles.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>
</Application>


После этого в приложении будут доступны ресурсы из всех словарей, перечисленных в AllStyles.xaml.
...
Рейтинг: 0 / 0
Как в библиотеке использовать стиль из словаря ресурсов?
    #38475051
Hobotanius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ.
Значит - на сколько я понял ни какого другого способа нет...
Не совсем понятно тогда как будет происходить подключение библиотеки после компиляции - когда исходники не доступны есть только - dll-файл - на какие тогда словари будет ссылаться конечная сборка в App.xaml, если будет только dll?
Вообще это странно, что нужно обязательно в App.xaml прописывать ссылку на словарь библиотеки. Получается, что нужно дополнительно хранить информацию для каждой библиотеки об имени словаря ресурсов для неё.
Способ который Вы описали понятен, в создани ещё одного точно такого же файла-словаря не вижу смысла - У меня и так для данной библиотеки предполагается только один xaml-файл ресурсов. Вот со стороны приложения там - другое дело - библиотек может быть много поэтому если по каждой ещё и ссылку на словарь прописывать, то объединяющий словарь наверное уместен.
Но ведь как то же можно в библиотеке использовать стиль из словаря ресурсов напрямую? Чтобы не приходилось прописывать окольные ссылки. Получается - чтобы в библиотеке применить некоторый стиль к окнам, нужно сначала передать ссылку на этот стиль приложению которое будет использовать библиотеку?
Ведь по сути - стиль это поименовонное присвоение некоторым свойствам определённых значений. То есть при создании окна его свойствам просто значение присвоется, тогда вид и поведение окна будет тем что нужно, но если делать это напрямую, то утратится возможность централизовано управлять видом и поведением всех окон данной библиотеки.
Как же всё-таки использовать в библиотеке стили таким образом чтобы приложение, которое будет пользоваться библотекой не было обременено необходимостью ссылаться на словари ресурсов подключаемых библиотек?
...
Рейтинг: 0 / 0
Как в библиотеке использовать стиль из словаря ресурсов?
    #38475099
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HobotaniusКак же всё-таки использовать в библиотеке стили таким образом чтобы приложение, которое будет пользоваться библотекой не было обременено необходимостью ссылаться на словари ресурсов подключаемых библиотек?
Советую подумать, как вы используете стили из других ResourceDictionary, находящихся в основной сборке приложения. Выводы расширить до использования стилей из ResourceDictionary подключаемых сборок.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как в библиотеке использовать стиль из словаря ресурсов?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]