2011-05-02 184 views
4

我在我正在處理的應用程序中遇到了一個(很大的)問題。WPF共享資源問題 - 沒有App.xaml,沒有共享資源

我正在爲我的公司申請一個模塊。該應用程序是一個WinForm應用程序,但我一直在研究一個將在此WinForm應用程序中託管的WPF應用程序(不像您將看到的應用程序)。

爲此,我使用WinForm元素主機,並且創建了一個「shell」用戶控件,然後在該shell用戶控件內部創建了其他用戶控件窗口。所以它看起來像一個WPF應用程序,並且只使用WinForm應用程序作爲它的啓動項目,因爲WPF應用程序實際上只是一組WPF控件。

我遇到的問題是因爲我沒有創建一個實際的「WPF應用程序」,所以沒有App.xaml。這使我無法按照自己的願望使用共享資源,特別是XAML共享資源。

有沒有辦法仍然可以將我的WPF用戶控件集合作爲WPF應用程序,並以某種方式爲我的資源使用App.xaml文件。如果不是,我的應用程序中使用共享資源的選項是什麼。

回答

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資源。

你可以找到一些更具體的信息herehere