2015-05-09 66 views
0

我覺得這是一種常識和微不足道的,但我不明白我在做什麼開始。我沒有任何其他資源可供我使用。有時候我想知道我是否在正確地搜索問題。無法使用單獨的文件解析資源

我有一些自定義樣式&我製作的模板,但現在該文件相當大,難以使用。我想將每個樣式或模板放在自己的XAML文件中(像頭文件/實現文件那樣),以便朋友可以使用它,然後將其添加到項目中。 (如Dictionary1.xaml ...)。我開始了一個空白的項目,以保持簡單。

Dictionary1.XAML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<ResourceDictionary x:Key="SomeKey"> 
    <Color x:Key="detailMark">Black</Color> 
    <SolidColorBrush x:Key="detailMarkBrush" Color="{StaticResource ResourceKey=detailMark}" /> 
    <Style x:Key="flatTextBox" TargetType="{x:Type TextBox}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <Grid> 
         <Rectangle Stroke="{StaticResource ResourceKey=detailMarkBrush}" StrokeThickness="1"/> 
         <TextBox Margin="1" Text="{TemplateBinding Text}" BorderThickness="0"/> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

的App.xaml

<Application x:Class="WpfApplication1.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication1" 
     StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <local:MainWindow x:Key="SomeKey"/> 
    </Application.Resources> 

</Application> 

而MainWindow.XAML

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


    <Grid> 
     <TextBox Style="{DynamicResource flatTextBox}"> <!-- doesn't autocomplete/work --> 

     </TextBox> 

    </Grid> 
</Window> 

編輯:

<TextBox Style="{Binding Mode=OneWay, Source={StaticResource SomeKey}}"> 
     <!-- Throws System.Windows.Markup.XamlParseException --> 

    </TextBox> 
+0

我已編輯 你的題目。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

對不起,我喜歡這個網站,我只是不經常使用它。 –

+1

一些谷歌爲你:嘗試[「合併資源字典」](https://msdn.microsoft.com/en-us/library/aa350178%28v=vs.110%29.aspx)如果你想組織你的資源字典中更易於管理的塊。 – Alex

回答

3

如前所述Alex,這樣做的正確方法是使用Merged Dictionaries
因此,你應該正確地構建你的項目,否則它會最終陷入混亂。

保持你的 「空白項目」,它應該是這樣的:

  • YourProject
    • 的App.xaml (的.cs)
    • MainWindow.xaml (的.cs)
    • SomeOtherWindow.xaml (.cs)
    • 資源文件夾
      • Dictionary1.xaml
      • Dictionary2.xaml
      • ...

然後,你必須做出決定:

  1. 您是否希望資源在應用程序範圍內可用?
  2. 或者您是否希望資源在某些窗口/用戶控件之間有所不同?

如果你想#1,你在App.xaml中文件合併字典:

<Application x:Class=... 
      ...> 
    <Application.Resources>   
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Dictionary1.xaml"/> 
       <ResourceDictionary Source="Resources/Dictionary2.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

如果你想#2,你必須合併在特定窗口/用戶控制文件中的字典:

<Window x:Class=... 
     ...> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Dictionary1.xaml"/> 
       <ResourceDictionary> 
        <!-- Window specific resources --> 
       </ResourceDictionary> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 

    <!-- Content --> 
</Window> 
+1

是的,無論出於何種原因,我最終嘗試了這一點,並且完美運作。我認爲這是一個知道情況是戰鬥的一半,我需要知道合併字典存在,以及如何實施它們。之後,我創建了一個空白項目,並使用alex提到的例子,它工作。我回到了我的項目,它也很好。 我感到非常沮喪。 –

相關問題