silverlight - 从 DataTemplate 按名称获取对象引用

标签 silverlight silverlight-4.0

如果我有以下 XAML:

<toolkit:DataForm Height="100"  x:Name="form">
        <toolkit:DataForm.EditTemplate>
            <DataTemplate>
                <StackPanel Name="stack"></StackPanel>
            </DataTemplate>
        </toolkit:DataForm.EditTemplate>
    </toolkit:DataForm>
我可以通过 this.FindName("form") 从 View 中获取对“表单”的引用。

如何获得对“堆栈”的引用? FindName 返回空值。

最佳答案

这里的问题是 DataTemplate 的 xaml 内容与外部 Xaml 属于不同的 NameScope。打电话FindName在元素上仅搜索最初生成该元素的 NameScope。因此调用FindNameUserControl 上不会找到由 DataTemplate 生成的元素.原因是DataTemplate (和其他模板)被设计为多次重复使用,使用 NameScope 消除了名称的歧义。

解决方案是调用 VisualTreeHelper 的帮助,看看这个 blog 中的代码对于我的看法VisualTreeHelper .随着VisualTreeEnumeration该博客中的类已添加到您的项目中,您可以这样做:-

var element = this.Descendents().OfType<FrameworkElement>().FirstOrDefault(fe => fe.Name == "stack");

当然如果你知道“stack”是一个StackPanel然后你可以通过 .OfType<T> 获得更具体的信息.

关于silverlight - 从 DataTemplate 按名称获取对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137967/

相关文章:

.net - wcf 服务绑定(bind)中的相对 url

wcf - 是否可以在运行时重写 silverlight 应用程序资源?

silverlight-4.0 - WF4.0 与 Silverlight 4.0 集成

silverlight - 如何在Silverlight应用程序中获取托管网站的URL?

data-binding - Silverlight 列表框 : Binding does not get updated

silverlight - 发生 XamlParseException : Failed to create a 'System.Windows.Style' from the text 'PhoneMasterGridColumnHeader'

silverlight - 如何在 Silverlight 中绑定(bind) GradientStop 颜色或 GradientStops 属性?

Silverlight 中的 Java?

c# - 如果第一个在 Silverlight 中为 null,则绑定(bind)到第二个属性

visual-studio-2010 - 如何从 SilverLight 4 应用程序项目定位 .net Framework 4.0?