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
Wpf 将DataTemplate绑定到CustomControl问题_Wpf_Silverlight_Data Binding_Custom Controls_Datatemplate - Fatal编程技术网

Wpf 将DataTemplate绑定到CustomControl问题

Wpf 将DataTemplate绑定到CustomControl问题,wpf,silverlight,data-binding,custom-controls,datatemplate,Wpf,Silverlight,Data Binding,Custom Controls,Datatemplate,我得到的是一个自定义控件,它在xaml中实现datatemplate: <DataTemplate x:Key="Templat"> <StackPanel> <TextBlock Text="Sample Text" /> <TextBlock Text="{Binding Surname}" /> </StackPanel> </DataTemplate> 和自定义控件:

我得到的是一个自定义控件,它在xaml中实现datatemplate:

<DataTemplate x:Key="Templat">
    <StackPanel>
        <TextBlock Text="Sample Text" />
        <TextBlock Text="{Binding Surname}" />
    </StackPanel>
</DataTemplate>
和自定义控件:

 <local:MyControl x:Name="MyControl1" 
      ItemTemplate="{StaticResource Templat}" Margin="0,0,-24,8"/>
自定义控件库中的generic.xaml具有:

<ControlTemplate TargetType="local:MyControl">
   <Canvas Name="LayoutRoot" Height="{TemplateBinding Height}" 
           Width="{TemplateBinding Width}" 
           Background="{TemplateBinding Background}" 
           CacheMode="BitmapCache">

      <Canvas Name="ItemsHost" Margin="10,185,0,0" Height="615" 
              Width="{TemplateBinding Width}" CacheMode="BitmapCache">
           <local:CustomItem x:Name="Item1" 
                  ContentTemplate="{TemplateBinding ItemTemplate}" />
           <local:CustomItem x:Name="Item2" 
                  ContentTemplate="{TemplateBinding ItemTemplate}" />
      </Canvas>  
   </Canvas> 
</ControlTemplate> 
我做错了什么

我创建了一个自定义项控件,其中包含一些自定义内容控件。我希望它们都具有相同的内容模板,因此我将它们的内容模板绑定到父控件中定义的itemtemplate

我的问题是控件将显示带有示例文本的textblock,而不是带有绑定值的textblock。我试图在codebehind中指定DataContext,比如DataContext=new Person{Nastname=Johnson}或通过xaml。他们都没有工作


DataContext Person类的传递看起来是正确的,但传递的DataTemplate缺少“{Binding Lastname}”表达式。您知道哪里可能出错吗?

数据模板中控件的DataContext不是从其父控件继承的。因此,在您的示例中,Templat中的所有内容都将具有与CustomItem和MyControl不同的DataContext

DataTemplate的DataContext来自关联ContentControl或ContentPresenter的Content属性。因此,在您的情况下,如果您这样做:

<local:CustomItem x:Name="Item1" Content="{Binding}" ContentTemplate="{TemplateBinding ItemTemplate}" />
然后您可以设置MyControl的DataContext,它将被传递到您的DataTemplate


但是,从外观上看,您的MyControl应该是一个ItemsControl,正如所解释的。

当我编写使用数据模板的自定义控件时,我必须在自定义控件中编写代码以将模板绑定到模型。如果第一个答案不适用于您,请检查此资源: