У меня есть DataTemplate, что я хочу найти использование FrameworkElement.FindResource()
. Чтобы сделать это, у меня должен быть ключ на шаблоне данных.
Проблема состоит в том, что x:key и присвоение типа данных являются взаимоисключающими. (Ссылка)
Так, после того как я установил DataType для своего шаблона, как я нахожу Значение ключа? Есть ли некоторая формула, которая преобразовывает DataTemplate в строку для Ключа?
(Для запрашивает относительно того, почему я должен был найти DataTemplate Ресурсом, посмотрите этот вопрос.
Ключ 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
}
}
}