我在 XAML 中定义了一个带有代码隐藏的 ResouceDictionary。我需要使用鼠标事件和数据绑定定义一些特定于视图的行为,为此我需要访问在 DataTemplate 中定义的一些元素。
问题是,DataTemplate 没有 Key 它只有一个 TargetType(这是必需的,因此 WPF 将自动将其用于给定类型)。
那么,如何从代码隐藏中访问 DataTemplate?
编辑:
如果我在构造函数的某处放置一个断点,我可以看到我的 ViewModel 的模板就在那里。似乎 ResourceDictionary.Keys 属性是一个对象数组,而我要访问的键(或实际上是相应的值)在调试器中是这样的:
{DataTemplateKey(Company.Application.ViewModels.TargetViewModel)}
XAML:
<sys:Double x:Key="escala">10</sys:Double>
<sys:Double x:Key="raio">20</sys:Double>
<EllipseGeometry x:Key="geometriacirculo"
RadiusX="{StaticResource raio}"
RadiusY="{StaticResource raio}"/>
<ScaleTransform x:Key="transform" ScaleX="{StaticResource escala}" ScaleY="{StaticResource escala}" />
<ap:NormalConverter x:Key="NormalConverter"/>
<ap:BitmapToSource x:Key="BitmapToSource"/>
<DataTemplate DataType="{x:Type vm:TelaColetaViewModel}">
<.....
代码隐藏:
public partial class TelaColetaTemplate : ResourceDictionary
{
EllipseGeometry _geometria_circulo;
ScaleTransform _scale_transform;
Grid GridZoom;
Path CirculoGuia;
double _escala;
Point? _ponto_clicado_norm;
public TelaColetaTemplate()
{
InitializeComponent();
// three following lines work, accessing them with key, no problem
_geometria_circulo = (EllipseGeometry)this["geometriacirculo"];
_scale_transform = (ScaleTransform)this["transform"];
_escala = (double)this["escala"];
//var wantedTemplate = ????
......