Проблема с общим ресурсом WPF - нет App.xaml, нет общих ресурсов

У меня возникла небольшая (ну большая) проблема в приложении, над которым я работаю.

Я работаю над модулем приложения для своей компании. Это приложение WinForm, но я работал над приложением WPF (не совсем приложением, как вы увидите), которое будет размещено в этом приложении WinForm, когда оно будет завершено.

Для этого я использую хост элемента WinForm, и я создал пользовательский элемент управления «оболочку», а затем другие окна пользовательского элемента управления внутри этого пользовательского элемента управления оболочки. Таким образом, он выглядит как приложение WPF и использует только приложение WinForm в качестве своего запускаемого проекта, поскольку приложение WPF на самом деле представляет собой всего лишь набор элементов управления WPF.

Проблема, с которой я столкнулся, заключается в том, что, поскольку я не создал фактического «приложения WPF», не существует App.xaml. Это не позволило мне использовать общие ресурсы так, как я хочу, особенно общие ресурсы XAML.

Могу ли я по-прежнему рассматривать мою коллекцию пользовательских элементов управления WPF как приложение WPF и каким-то образом использовать файл App.xaml для своих ресурсов. Если нет, то каковы мои варианты использования общих ресурсов в моем приложении.


person TheJediCowboy    schedule 02.05.2011    source источник


Ответы (1)


Добавьте файл ResourceDictionary (xaml) в свой проект (при условии, что это библиотека классов - библиотека пользовательских элементов управления WPF), объедините его поверх Generic.xaml, тогда вы сможете ссылаться на него, и ваш StaticResource будет работать.

Вы также можете включить ресурс в сам файл Generic.xaml (или любой другой файл xaml).

Вот как должен выглядеть ваш текущий словарь:

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"   
  xmlns:local="clr-namespace:WpfCustomControlLibrary1">

  <sys:String x:Key="myString">sdfasdf</sys:String>

  <Style TargetType="{x:Type local:CustomControl1}">
    <Setter Property="Text" Value="{StaticResource myString}"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type local:CustomControl1}">
          <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
            <TextBlock Text="{TemplateBinding Text}"/>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>

Я инициализировал экземпляр указанного выше элемента управления во время разработки в VS2010, и он показал текст (Text - это строковое свойство DP, которое я вручную добавил в CustomControl1), что означает, что он читает ресурс myString.

Вы можете найти более конкретную информацию здесь и здесь.

person Shimmy Weitzhandler    schedule 02.05.2011