XamlファイルにDataTemplate
が定義されており、C#コード経由でアクセスしたい。誰でもアクセス方法を教えてください。新しいResourceDictionary
ファイルを追加しました。その名前は Dictionary1.xaml。次のようなデータテンプレートがあります。
<ResourceDictionary xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="mytemplate">
<TextBlock Text="Name:" Background="Blue"/>
</DataTemplate>
</ResourceDictionary>
listBox1と呼ばれるListBox
がなく、それをItemtemplate
プロパティに割り当てたいのですが、どうすればそれができますか?
どこで正確に定義していますか?
オブジェクトのResourceDictionaryで定義すると、
Application.Current.Resources[typeof(yourDataTemplateTargetType)]
動作するはずです。 ItemsControlなどの他の何かのメンバーとして定義している場合、ItemsControlインスタンスへのハンドルを取得して、ItemTemplateプロパティを呼び出す必要があります。
編集:OK、私たちはどこかに来ていると思います。したがって、独自のファイルでResourceDictionaryを定義しています。 UIで使用してコードビハインドからアクセスする前に、そのResourceDictionaryをアプリケーションにマージする必要があります。これやってる?
もしそうなら、次のステップはこのリソースを取得することです。各FrameworkElementには、 FindResource というメソッドがあります。このメソッドは、ResourceDictionaryツリーをさかのぼって、キーを使用してリソースを見つけようとするため、優れています。したがって、UserControlからこのリソースにアクセスする場合は、コードビハインドで次の操作を実行できます。
FindResource(typeof(yourDataTemplateTargetType));
これで問題が解決しない場合は、このリソースディクショナリを宣言する方法と、アプリケーションのリソースにマージする方法を正確に示してください。
私の場合、Application.Current
はnullであったため、これを使用することになりました。
var myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source =
new Uri("/DllName;component/Resources/MyResourceDictionary.xaml",
UriKind.RelativeOrAbsolute);
myResourceDictionary["KeyName"] as TypeOfItem
を使用して必要な指定のキーを取得します
( ソース )
たとえば、App.xamlファイルのリソースディクショナリにButtonのテンプレートがある場合は、次のコードを使用してアクセスできます。
Application.Current.Resources[typeof(Button)]
次のようにして、プロジェクトに追加したリソースディクショナリにアクセスできます。
var rd = new ResourceDictionary();
rd.Source = new Uri("ms-appx:///Dictionary1.xaml");
その後、次のようにリソースディクショナリに保存されているリソースにアクセスできます。
someObject.Property = rd["mytemplate"];
注:
プロジェクトのベースディレクトリを基準にして作成した場所に応じて、リソースディクショナリのURIを変更する必要があります。
上記のいずれの方法でも、場所に基づいてリソースを取得できます。MVVMmを使用している場合は、この方法をお勧めします。