我在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 = ????
......
答案 0 :(得分:5)
DataTemplates
仅提及DataType
但没有x:Key
将为其创建隐式密钥。因此,基本上要访问您的DataTemplate,您需要做的就是创建一个DataTemplate Key并使用它作为ResourceDictionary
的索引器参数
以下示例代码:
new DataTemplateKey(typeof(TargetViewModel));