Wpf 将DataTemplate绑定到CustomControl问题
我得到的是一个自定义控件,它在xaml中实现datatemplate: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> 和自定义控件:
<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,正如所解释的。当我编写使用数据模板的自定义控件时,我必须在自定义控件中编写代码以将模板绑定到模型。如果第一个答案不适用于您,请检查此资源: