Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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
Xaml 如何在Windows 8.1中的ContentPresenter中使用模板选择器_Xaml_Winrt Xaml_Windows 8.1_Win Universal App - Fatal编程技术网

Xaml 如何在Windows 8.1中的ContentPresenter中使用模板选择器

Xaml 如何在Windows 8.1中的ContentPresenter中使用模板选择器,xaml,winrt-xaml,windows-8.1,win-universal-app,Xaml,Winrt Xaml,Windows 8.1,Win Universal App,我有一个Windows8.1应用程序。我有一个根据一定的值选择不同模板的要求。为此,我在xaml中使用ContentPresenter和静态资源TemplateSelector 这是我在xaml资源中的datatemplates和templateselector <DataTemplate x:Key="template1"> <TextBox Text="Temp 1" /> </DataTemplate> <

我有一个Windows8.1应用程序。我有一个根据一定的值选择不同模板的要求。为此,我在xaml中使用ContentPresenter和静态资源TemplateSelector

这是我在xaml资源中的datatemplates和templateselector

    <DataTemplate x:Key="template1">
        <TextBox Text="Temp 1" />
    </DataTemplate>

    <DataTemplate x:Key="template2">
        <TextBox Text="Temp 2" />
    </DataTemplate>

    <DataTemplate x:Key="template3">
        <TextBox Text="Temp 3" />
    </DataTemplate>

    <template:BalanceTypesTemplateSelector x:Key="MySelector"
                                           Template1="{StaticResource template1}"
                                           Template2="{StaticResource template2}"
                                           Template3="{StaticResource template3}" />
但它根本没有击中templateselector代码。当我运行应用程序时,绑定的字符串将直接显示在显示屏上


如果有人能给我指出正确的方向,我会很高兴的。提前感谢。

基本上,您只覆盖了一个
SelectTemplateCore
重载

从文档中:

要定义有效的DataTemplateSelector子类,请提供
SelectTemplateCore(Object)
SelectTemplateCore(Object,DependencyObject)

一旦为
SelectTemplateCore(Object,DependencyObject)
提供了一个实现,它就会被调用

我试着这么做,但遇到了另一个问题——对象总是空的(而不是ContentPresenter的内容/数据上下文)

我问谷歌这是为什么,并发现。从中:

当与绑定到视图模型的ContentTemplateSelector属性一起使用时,Windows RT中的ContentControl和ContentPresenter似乎已损坏。模板选择器的“object”参数始终为空

在讨论的最后还有一个解决这个问题的方法


希望这有帮助。:)

使用ContentControl而不是ContentPresenter对我来说是可行的。感谢@kaibrumummed对我的问题的评论。

你能试试ContentControl而不是ContentPresenter吗?
<ContentPresenter ContentTemplateSelector="{StaticResource MySelector}"
                                                Content="{Binding MyData}" />
public class BalanceTypesTemplateSelector : DataTemplateSelector
{
    public DataTemplate Template1 { get; set; }
    public DataTemplate Template2 { get; set; }
    public DataTemplate Template3 { get; set; }

    protected override DataTemplate SelectTemplateCore(object item)
    {
            var type = item.ToString();
            switch (type)
            {
                case "t1":
                    return Template1;
                case "t2":
                    return Template1;
                case "t3":
                    return Template3;
                default:
                    throw new NotSupportedException();
            }
        }

        return null;
    }

}