Silverlight 从代码隐藏分配DataTemplate时ElementName不工作?
我试图使用DataTemplate中的ElementName访问控件,该DataTemplate在不同的UserControl(资源)中使用,而不是在xaml中定义的 想象一下这种情况: MyUserControl.xaml,在参考资料中包含以下数据模板:Silverlight 从代码隐藏分配DataTemplate时ElementName不工作?,silverlight,binding,resources,user-controls,datatemplate,Silverlight,Binding,Resources,User Controls,Datatemplate,我试图使用DataTemplate中的ElementName访问控件,该DataTemplate在不同的UserControl(资源)中使用,而不是在xaml中定义的 想象一下这种情况: MyUserControl.xaml,在参考资料中包含以下数据模板: <UserControl.Resources> <DataTemplate x:Key="SomeTemplate"> <TextBlock Text="{Binding Text, Eleme
<UserControl.Resources>
<DataTemplate x:Key="SomeTemplate">
<TextBlock Text="{Binding Text, ElementName=TextElement}"/>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<TextBlock x:Name="TextElement" Text="IT WORKS! (not...)"/>
</Grid>
</UserControl>
是否可以从UserControl之外定义的资源中使用ElementName
那么DataTemplate如何在同一个UserControl中搜索ElementName呢?也许可以为DataTemplate本身设置类似DataContext的内容,以便ElementName正常工作,而不会干扰发送到模板内使用的控件的DataContext?您需要查看与此相关的概念
简单地说,名称的作用域是加载Xaml资源的点。例如,每个UserControl都将加载自己的Xaml,因此具有自己的名称范围。在您的案例中,您要求
MyUserControlWrapper
查找其LoadComponent
未看到的名称。也许您可以使用RelativeSource和FindAncestor在VisualTree上漫游?
这里提供了不同绑定变体的良好演示:
为了帮助您找到一个解决方案,您最好展示“MyUserContolWrapper”是如何放置的。目前还不清楚它与MyUserControl的关系。我正在用代码隐藏构建初始视图,并将其放在包装器的ContentPresenter中。包装器排序“增强”了基本视图的一些功能,如工具栏、边栏等。因此,包装视图可能看起来像[Toolbar][Side][Original view][InfoFrame],在原始视图中,您可以使用模板控制包装内容的某些部分。这是通过定义严格的名称数据模板来实现的。想象一下,就像包装器定义了InfoFrame的设计(边框、位置等),但InfoFrame中的信息本身是从原始视图的DataTemplate x:Key=“InfoContent”加载的。有没有一种方法可以从代码隐藏中将任何控件的名称范围分配/设置到DataTemplate?
<ContentPresenter x:Name="ContentPresenter" Content="{Binding SomeContent}"/>
ContentPresenter.ContentTemplate = (DataTemplate)childView.Resources["SomeTemplate"];