2011-10-13 189 views
5

我想從WPF自定義控件庫 實際上從其他文件加載WPF樣式,但我無法加載在這裏是我的解決方案。從資源文件加載WPF樣式

該溶液包含兩個項目

  1. WpfTestControls類型WPF定製控件庫

  2. WpfTestApp類型的WPF應用程序圖書館,其具有參考WpfTestControls

MainWindow.xaml來自WPF應用程序庫

<Window.Resources> 
    <Style x:Key="TempStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="Green"/> 
    </Style> 
</Window.Resources> 
<Grid> 
    <TextBox Height="50px" Width="100px" Style="{DynamicResource TempStyle}"/> 
</Grid> 

Generic.xaml從WPF自定義控件庫

<ResourceDictionary 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/WpfTestControls;component/TextBoxStyle.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

TextBoxStyle.xaml從WPF自定義控件庫

<ResourceDictionary 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Style x:Key="TempStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="BorderBrush" Value="Green"/> 
</Style> 

我的AssemblyInfo.cs文件包含以下

[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
//(used if a resource is not found in the page, 
// or application resource dictionaries) 
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
//(used if a resource is not found in the page, 
// app, or any theme specific resource dictionaries))] 

但我仍無法加載樣式。 如果我使用的是不使用Generic.xaml一切做工精細,例如下面的代碼按預期工作

<Window x:Class="WpfTestApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <Style x:Key="TempStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="Green"/> 
    </Style> 
</Window.Resources> 
<Grid> 
    <TextBox Height="50px" Width="100px" Style="{StaticResource TempStyle}"/> 
</Grid> 

我到底做錯了什麼? 在此先感謝

回答

5

請爲我解答一些事情......

  1. 是「WPF自定義控件庫」爲「WpfTestControls」議會會議一樣嗎?
  2. 如果不是,那麼「WPF自定義控件庫」是否有對「WpfTestControls」程序集的引用?
  3. 您的WpfTestApp是否對「WPF自定義控件庫」和「WpfTestControls」程序集有引用?

如果添加該引用,則應正確加載資源。

我的步驟...

  1. 添加 「WPF自定義控件庫」 說 「ThemesLibray」
  2. 在這種添加在 「主題」 文件夾

兩個資源字典TextBoxStyle.xaml

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="GreenTextBoxStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="Background" Value="Green"/> 
    </Style> 
</ResourceDictionary> 

Generic.xaml

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="TextBoxStyle.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
  • 我有主要的Starup項目 「MyWPFTestApp」 具有裝配參照ThemesLibray。在該窗口有ThemesLibrary資源合併,這樣....

    <Window x:Class="MyWPFTestApp.Window7" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         Title="Window7" Height="300" Width="300"> 
        <Window.Resources> 
         <ResourceDictionary> 
          <ResourceDictionary.MergedDictionaries> 
           <ResourceDictionary 
            Source="/ThemseLibrary;component/Themes/Generic.xaml"/>  
          </ResourceDictionary.MergedDictionaries>    
         </ResourceDictionary> 
        </Window.Resources> 
        <Grid> 
         <TextBox Style="{StaticResource GreenTextBoxStyle}"/> 
        </Grid> 
    </Window> 
    
  • 當我啓動MyWPFTestApp,我看到綠色的文本框的窗口。

    +0

    嗨也許我寫錯了,但解決方案只包含兩個項目類型WPF自定義控件庫WpfTestControls和類型Wpf應用程序的WpfTestApp具有引用兩個WpfTestControls。 – Robob

    +0

    正確,所以看到我上面的編輯... –

    +0

    你是對的,但據我瞭解,它應該與以前的解決方案。這是我現在要採用的解決方法 – Robob

    1

    主要事情是:確保您的資源字典的生成操作設置爲資源。