WPF DataTemplate - x:Key по сравнению с DataType = “{x:Type XXXX”)

У меня есть DataTemplate, что я хочу найти использование FrameworkElement.FindResource(). Чтобы сделать это, у меня должен быть ключ на шаблоне данных.

Проблема состоит в том, что x:key и присвоение типа данных являются взаимоисключающими. (Ссылка)

Так, после того как я установил DataType для своего шаблона, как я нахожу Значение ключа? Есть ли некоторая формула, которая преобразовывает DataTemplate в строку для Ключа?

(Для запрашивает относительно того, почему я должен был найти DataTemplate Ресурсом, посмотрите этот вопрос.

11
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

Ключ x:Key, похоже, является объектом типа System.Windows.DataTemplateKey. Таким образом, вы можете "создать" ключ для вашего ресурса с помощью нового DataTemplateKey(typeof(myType)). FindResource будет работать с этим ключом, так как TemplateKey.Equals был переопределен.

Вот очень простой пример приложения:

XAML:

<Window ...>
    <Window.Resources>
        <DataTemplate DataType="{x:Type TextBlock}">
        </DataTemplate>
    </Window.Resources>

    <Button Click="Button_Click">Test</Button>
</Window>

Codebehind:

//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
        }
    }
}
19
ответ дан 3 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: