2016-04-07 6 views
1

wpfのスタイルとデータテンプレートについて少しずつ理解し始めます。どのように再利用することができるのでしょうか?その中で定義され、それらを使用する必要があるアプリケーション内でマージされた辞書として参照される様々なステレおよびテンプレートが意味を成す。最終的にはスタイルのリポジトリになるファイルの正しい開始xamlは何ですか?

私はこことコードプロジェクトでいくつかの記事を見てきました。 1つの特定の1つのhereはかなり意味がありますが、私が見てきたすべての記事は1つの小さな点を省略しているようです。

<Style TargetType="dxb:BarButtonItem" 
      x:Key="NewStBtnStyle"> 
     <Setter Property="SuperTip"> 
      <Setter.Value> 
       <dx:SuperTip> 
        <dx:SuperTipHeaderItem Content="New" /> 
        <dx:SuperTipItem Content="Create a new record" 
            Glyph="pack://application:,,,/FishTrackerProfessional;component/Resources/Images/32/New.png"> 
         <dx:SuperTipItem.LayoutStyle> 
          <Style TargetType="{x:Type dx:Items2Panel}"> 
           <Setter Property="Alignment" 
             Value="Right" /> 
           <Setter Property="HorizontalIndent" 
             Value="20" /> 
          </Style> 
         </dx:SuperTipItem.LayoutStyle> 
        </dx:SuperTipItem> 
        <dx:SuperTipItemSeparator /> 
        <dx:SuperTipItem Content="Opens a new record entry form in a new window"> 
         <dx:SuperTipItem.ContentTemplate> 
          <DataTemplate> 
           <TextBlock FontFamily="Calibri" 
              Foreground="Gray" 
              FontSize="11" 
              Text="{Binding}" /> 
          </DataTemplate> 
         </dx:SuperTipItem.ContentTemplate> 
        </dx:SuperTipItem> 
       </dx:SuperTip> 
      </Setter.Value> 
     </Setter> 
    </Style> 

が、私はそれだけではなく、一つのプロジェクトではなく、いくつかの中で、有用であることを見ることができ、そしてより多くのように少し適応してそれができる:

は、私はそうのように定義されたスタイルを持っていると言うことができます同じような異なるアイテムの類似したシトルを生成するように修正されました。

私の質問はこれです。私は、スタイルのグループを1つのファイル(myNewStyles.xaml)に入れたいと思います。私は、私は次のように

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
スタイルを含むXAMLファイルを開始するために正しい構文であろうと思っていた

<window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

または

<userControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

を開始するユーザーコントロールをbeging窓付きfamilirarよ

しかし、IntelliSenseはそれが私にそれを伝えます

タイプ 'Style'の値は、 'Resource Dictionary'タイプのコレクションまたは辞書 に追加できません。

このようなxamlファイルを起動する正しい方法は何ですか?

+1

WPFですあなたのプロジェクトでdllが適切に参照されていますか? –

+1

@TimPohlmann私は彼らがそうだと思っていましたが、私はWindowsBaseへの参照を見逃していました。 wpfを使って作業するときは、クラスライブラリテンプレートではなくwpfアプリケーションテンプレートを使い始める方が良いと読んでいます。私は愚かに後者を行い、プレゼンテーションの参考文献を追加しましたが、残りの部分は追加しませんでした。ドー! –

+0

あなたはそれを理解してうれしい! –

答えて

0

次のことを試してみてください。

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

それはまさに私が持っているものです(質問の簡潔さのために短縮しました)、それは私に言及したエラーを与えています。 –

+0

は、別のXAMLファイル内の完全なコードを配置し、APP.XAMLにそれをフックアップし、その後、XAMLで、あなたはそれを – Apoorv

+0

@DomSinclair奇妙を参照することができます。私は私のプロジェクトの一つですべての私のスタイルのために別のファイルを持っていると私は 'のxmlns削除する場合:X ...'行を私はあなたと同じのIntelliSenseエラーを得ました。だから私はこれがあなたの問題を解決すると考えました。私は他の何かが欠けていると思う。 –

1

ねえ、あなたが何ができるかであるあなたがApp.XAML内のファイルの参照を追加することができ、このファイルを使用するために、リソースにこのファイルを追加することです。

だから、基本的には(resxファイル)ファイルリソースディクショナリにそれを追加し、スタイルを作成し、あなたがApp.Xamlに行き、あなたならば

<Application x:Class="DualScreenSampleApp.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Dictionary1.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 
+0

あなたは質問のポイントを見逃している、あなたが提案する何を私の最終的な目標である、とはい私はそれを行うことができます知っています。私が欲しいのは私の質問はどのように1は、上記の私の質問に示すように、例えばスタイル定義を含むファイルで、XAMLマークアップを開始んですなどのスタイルデータテンプレートを保持する様々なファイルを含む独立したプロジェクトです。私の質問で引用した質問/回答は、マージを行う方法を指摘しています。私は、stleとテンプレート定義を含む個々のファイルをどのように起動するかを具体的に説明しています。 –

0

に従うよう、あなたはスタイルシートの参照を追加スタイル用のリポジトリをご希望の場合は、ソリューションのすべてのプロジェクトでStylesを使用したい場合は、さらにお読みください。

リソースを維持するために、ソリューションに新しいプロジェクトを作成することができます。これを行うには:

  1. をあなたはあなたのソリューションWpfControlLibrary1に追加すると、例えば、YourProject.Resourcesそれを呼び出すことができます。

  2. (ブラシなどのための標準のWPFコントロールのスタイルにGeneric.WPF.xaml、Generic.Brushes.xamlのような)リソースのグループごとにテーマフォルダ `で別のXAMLファイルを作成したフォルダThemes

  3. を作成します。

  4. のような内容のファイルThemes\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="Generic.Brushes.xaml"/> 
        <ResourceDictionary Source="Generic.WPF.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
    
  5. 今、あなたはあなたのソリューションのいずれかのプロジェクトにそれらのリソースを追加することができます(あなたは右、それのための独立したプロジェクトを持っている?)、そのプロジェクトにYourApplication.Resourcesへの参照を追加し、あなたのビューのXAMLを追加することによって:

    <UserControl.Resources> 
    <ResourceDictionary> 
        <ResourceDictionary.MergedDictionaries> 
         <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/> 
        </ResourceDictionary.MergedDictionaries> 
        <!-- Put your not shared resource here --> 
    </ResourceDictionary> 
    </UserControl.Resources> 
    
関連する問題