Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 当DataTemplate不可用时,从ResourceDictionary访问DataTemplate';我没有钥匙,只有TargetType_Wpf_Code Behind_Resourcedictionary_Targettype - Fatal编程技术网

Wpf 当DataTemplate不可用时,从ResourceDictionary访问DataTemplate';我没有钥匙,只有TargetType

Wpf 当DataTemplate不可用时,从ResourceDictionary访问DataTemplate';我没有钥匙,只有TargetType,wpf,code-behind,resourcedictionary,targettype,Wpf,Code Behind,Resourcedictionary,Targettype,我有一个用XAML定义的带有codebehind的ResourceDictionary。我需要使用鼠标事件和数据绑定定义一些视图特定的行为,为此,我需要访问DataTemplate中定义的一些元素 问题是,DataTemplate没有键,它只有一个TargetType(这是必需的,所以WPF会自动将其用于给定的类型) 那么,如何从codebehind访问DataTemplate 编辑: 如果我在构造函数中的某个地方放置断点,我可以看到ViewModel的模板就在那里。似乎ResourceDict

我有一个用XAML定义的带有codebehind的ResourceDictionary。我需要使用鼠标事件和数据绑定定义一些视图特定的行为,为此,我需要访问DataTemplate中定义的一些元素

问题是,DataTemplate没有键,它只有一个TargetType(这是必需的,所以WPF会自动将其用于给定的类型)

那么,如何从codebehind访问DataTemplate

编辑:

如果我在构造函数中的某个地方放置断点,我可以看到ViewModel的模板就在那里。似乎ResourceDictionary.Keys属性是一个对象数组,我要访问的键(实际上是对应的值)在调试器中如下所示:

{DataTemplateKey(Company.Application.ViewModels.TargetViewModel)}
XAML:


DataTemplates
只提到了
DataType
,但没有
x:Key
将为它们创建一个隐式键。因此,基本上要访问DataTemplate,只需创建DataTemplate键并将其用作
ResourceDictionary

示例代码如下:

new DataTemplateKey(typeof(TargetViewModel));

如果使用
x:Key
,则可以使用静态方法
FindResource
。我不知道“无名”
DataTemplates
。Sorry@Tico最基本的一点是,如果要为给定类型自动(而不是显式)加载数据模板,就不要将密钥放入其中。如果我放置一个断点,我可以看到隐式键,只是不知道如何访问它,请查看我的编辑。当我使用
DataTemplates
时,它只使用XAML,而不使用代码隐藏。但我确实使用上述方法应用资源。好问题,我将关注这个线程。正如您在编辑中提到的,只提到数据类型但没有键的数据模板将为它们创建一个隐式键。因此,对于您的DataTemplate,关键是
newDataTemplateKey(typeof(TargetViewModel))
@sthotakura我非常感谢您,简单的一行
var wantedTemplate=this[newDataTemplateKey(typeof(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 = ????

        ......
new DataTemplateKey(typeof(TargetViewModel));