我正在尝试使用DataTemplate中的ElementName访问Control,该DataName在不同的UserControl(Resources)中使用,而不是在定义的(在xaml中)。
想象一下这种情况:
MyUserControl.xaml,资源中包含以下DataTemplate:
<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>
MyUserControlWrapper.xaml
<ContentPresenter x:Name="ContentPresenter" Content="{Binding SomeContent}"/>
在MyUserControlWrapper.xaml的代码后面我从MyUserControl.xaml设置了ContentPresenter的ContentTemplate:
类似的东西:
ContentPresenter.ContentTemplate = (DataTemplate)childView.Resources["SomeTemplate"];
是否可以在UserControl外部定义的资源中使用ElementName?
DataTemplate如何在同一个UserControl中搜索ElementName呢?也许可以设置类似DataConmplate的DataContext本身,以使ElementName工作,而不会弄乱发送给模板内部使用的控件的DataContext?
答案 0 :(得分:1)
您需要查看与Namescopes相关的概念。
简要说明名称的范围是加载Xaml资源的位置。例如,每个UserControl都会加载自己的Xaml,因此拥有自己的名称范围。在您的情况下,您要求MyUserControlWrapper
找到其LoadComponent
未见过的名称。
答案 1 :(得分:0)
也许你可以使用RelativeSource和FindAncestor走上VisualTree? 这里有一个很好的不同绑定变体的演示: http://www.wpfwiki.com/Default.aspx?Page=WPF%20Q5.3&AspxAutoDetectCookieSupport=1