2013-03-16 3 views
1

У меня есть .dll, содержащая тему 'engine'. Я почти завершил этот движок со встроенным списком, который обрабатывает темы через DLL. Короче, что я пытаюсь выполнить, это автономная .dll, с которой я могу ссылаться из любого проекта и (без добавления кода в приложение для хостинга) иметь свои темы, стили и т. Д.настройка MainWindow.Background для внешнего ресурса

это работает, но я столкнулся с чем-то вроде затруднительного положения. Поскольку .dll загружает необходимые файлы xaml во время выполнения с использованием синтаксиса URI, сами управляющие приложения не знают о ресурсах, пока приложение не будет загружено. Теперь это генерирует предупреждение о компиляции, но при запуске приложения нет проблем.

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

<Window x:Class="Check.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mycon="clr-namespace:ThemeLibrary.MyControls;assembly=ThemeLibrary" 
    Title="MainWindow" Height="350" Width="525" WindowStyle="None" AllowsTransparency="True" 
Background="{***DynamicResource ResourceKey=TransparentColorBrush***}"> 

снова, несмотря на то, что есть ошибка, программа компилируется и работает нормально, потому что, если динамический ресурс не может быть решена окно только по умолчанию, но как только .dll загружает словарь ресурс, содержащий кисть, ключ это TransparentColorBrush, тогда фон окна изменяется соответствующим образом. Но если я передам свой .dll, чтобы сказать, что публика будет играть, они не будут ЗНАТЬ, какие разные клавиши кисти и, следовательно, не смогут этого взломать.

Итак, как я могу установить Application.Current.MainWindow.Background = (кисть из загруженного ресурсного словаря ресурсов URI или самого словаря) внутри .dll, или выставлять ключи кистей как общедоступные свойства?

ответ

1

Хорошо, вот что я узнал ...

В моей .dll я могу установить следующие свойства для окна приложения, просто используя приведенный ниже синтаксис ...

Application.Current.MainWindow.SetResourceReference(Window.BackgroundProperty, "MainWindowBackgroundBrush"); 
     Application.Current.MainWindow.SetResourceReference(Window.BorderBrushProperty, "BorderBrush"); 
     Application.Current.MainWindow.SetResourceReference(Window.BorderThicknessProperty, "MainBorderThickness"); 
     Application.Current.MainWindow.SetResourceReference(Window.AllowsTransparencyProperty, "MainAllowsTransparency"); 

в статический класс, который я создал, чтобы помочь управлять изменениями скина. Я также объявил новый словарь ресурсов следующим образом:

xmlns:s="clr-namespace:System;assembly=mscorlib" 
<Thickness x:Key="MainBorderThickness" >2</Thickness> 
<s:Boolean x:Key="MainAllowsTransparency">True</s:Boolean> 

Я очень возбужден !!! Это именно то, что я искал. Итак, теперь мои пользовательские скины и механизмы для их изменения из одного в другое все обернуты в единую .dll, которая обрабатывает ВСЕ в отношении скина, не добавляя один символ кода в хостинг-приложение. Теперь каждый файл> Новый может просто иметь ссылку на сборку и пространство имен xmlns и POOF для всех моих скинов.

Смежные вопросы