Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Silverlight 从代码隐藏分配DataTemplate时ElementName不工作?_Silverlight_Binding_Resources_User Controls_Datatemplate - Fatal编程技术网

Silverlight 从代码隐藏分配DataTemplate时ElementName不工作?

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

我试图使用DataTemplate中的ElementName访问控件,该DataTemplate在不同的UserControl(资源)中使用,而不是在xaml中定义的

想象一下这种情况:

MyUserControl.xaml,在参考资料中包含以下数据模板:

<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"];