gpt4 book ai didi

wpf - 当 DataTemplate 没有键,只有 TargetType 时,从 ResourceDictionary 访问 DataTemplate

转载 作者:行者123 更新时间:2023-12-02 01:08:19 31 4
gpt4 key购买 nike

我有一个用代码隐藏在 XAML 中定义的 ResouceDictionary。我需要使用鼠标事件和数据绑定(bind)定义一些特定于 View 的行为,为此我需要访问在 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 = ????

......

最佳答案

DataTemplates 仅提及 DataType 但未提及 x:Key 将为它们创建一个隐式 key 。因此,基本上要获取您的 DataTemplate,您需要做的就是创建一个 DataTemplate 键并将其用作 ResourceDictionary

的索引器参数

示例代码如下:

new DataTemplateKey(typeof(TargetViewModel));

关于wpf - 当 DataTemplate 没有键,只有 TargetType 时,从 ResourceDictionary 访问 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987165/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com