4

作業中のアプリケーションで小さな(かなり大きな)問題が発生しました。

私は自分の会社のアプリケーションのモジュールに取り組んでいます。このアプリケーションはWinFormアプリケーションですが、完成時にこのWinFormアプリケーションでホストされるWPFアプリケーション(実際にはアプリケーションではありません)に取り組んでいます。

これを行うために、私はWinForm要素ホストを使用しており、「シェル」ユーザーコントロールを作成してから、そのシェルユーザーコントロール内に他のユーザーコントロールウィンドウを作成しました。つまり、WPFアプリケーションとして表示され、WinFormアプリケーションのみをスタートアッププロジェクトとして使用します。これは、WPFアプリケーションが実際にはWPFコントロールのコレクションにすぎないためです。

私が遭遇した問題は、実際の「WPFアプリケーション」を作成していないため、App.xamlがないことです。これにより、共有リソース、特にXAML共有リソースを希望どおりに使用できなくなりました。

WPFユーザーコントロールのコレクションをWPFアプリケーションとして扱い、リソースにApp.xamlファイルを使用する方法はありますか。そうでない場合、アプリケーションで共有リソースを使用するためのオプションは何ですか。

4

1 に答える 1

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

より具体的な情報については、こちらこちらをご覧ください。

于 2011-05-02T17:18:23.240 に答える