Доступ к ресурсам во время инициализации контроля - PullRequest
0 голосов
/ 20 июля 2010

давайте предположим, что у нас есть следующее определение элемента управления


<ctrl:ChildWindow x:Class="Control.Editor"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:ctrl="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
                  xmlns:local="clr-namespace:Control"
                  Width="400" Height="300"
                  local:AttachedProperties.DialogResult="{Binding Path=DialogResult}"
                  Title="{Binding Path=Caption}" Style="{StaticResource Title}" DataContext="{Binding}" HasCloseButton="False">
    <ctrl:ChildWindow.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Control;component/Resources/BaseAppearance.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </ctrl:ChildWindow.Resources>
</ctrl:ChildWindow&gt

Проблема в том, что стиль корневого элемента управления не может быть установлен, так как ResourceDictionary не загружен.

Как я могу получить доступ к StaticResource Title во время инициализации элемента управления, когда у меня нет доступа к App классу? Я также не уверен, что это было бы возможно, если бы у меня был доступ к нему.


Привет

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Я нашел общий путь без использования кода позади. Я знал, что это возможно. ^^


<ctrl:ChildWindow x:Class="Control.Editor"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:ctrl="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
                  xmlns:local="clr-namespace:Control"
                  Width="400" Height="300"
                  local:AttachedProperties.DialogResult="{Binding Path=DialogResult}"
                  Title="{Binding Path=Caption}" DataContext="{Binding}" HasCloseButton="False">
    <ctrl:ChildWindow.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Control;component/Resources/BaseAppearance.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </ctrl:ChildWindow.Resources>
    <crtl:ChildWindow.Style>
        <StaticResource ResourceKey="Title" />
    </crtl:ChildWindow.Style>
</ctrl:ChildWindow&gt
1 голос
/ 20 июля 2010

Я бы порекомендовал получить доступ к вашему ресурсу и выполнить работу в событии .Loaded () вашего элемента управления.

Редактировать: Подумав ... Я думаю, я знаю, что вы делаете сейчас... В вашем классе App.xaml установлен ресурс, но вы хотите получить к нему доступ в своем элементе управления.

Простой способ обойти эту проблему - установить вместо него DynamicResource ... но это меньшеPerformant.

Что такое BuildAction для вашего App.xaml на вкладке свойства?Если это ApplicationDefinition ... тогда вы сможете получить доступ к своему ресурсу, как и сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...