11


2

WPF DataTemplate-x:Key vs DataType = "{x:Type XXXX")

`FrameworkElement.FindResource()`を使用して検索したいDataTemplateがあります。 そのためには、データテンプレートにキーが必要です。

問題は、x:keyとデータ型の割り当てが相互に排他的であることです。 (http://msdn.microsoft.com/en-us/library/ms742521.aspx [参照])

したがって、テンプレートのDataTypeを設定したら、Key値をどのように見つけることができますか? DataTemplateをキーの文字列に変換する数式はありますか?

(リソースがDataTemplateを取得する必要がある理由については、https://stackoverflow.com/questions/1951228/wpf-get-datatemplate-without-an-event [question]をご覧ください。

1 Answer


19


x:Keyはタイプ System.Windows.DataTemplateKey`のオブジェクトのようです。 したがって、 `new DataTemplateKey(typeof(myType))`を使用してリソースのキーを「作成」できます。 `TemplateKey.Equals`がオーバーライドされているため、 FindResource`はこのキーで動作します。

これは非常に単純なアプリケーションの例です。

XAML:

    Test

分離コード:

//using ...

namespace WpfCsApplication1 {
    public partial class Window1 : Window {
        public Window1() {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e) {
            var key = new System.Windows.DataTemplateKey(typeof(TextBlock));
            var r = (DataTemplate)this.FindResource(key);

            MessageBox.Show(r.ToString()); // to show that it worked
        }
    }
}