0

我正在制作 Silverlight 行为,以启用通过包含的“拖动句柄”元素拖动元素(而不是整个元素可拖动)。把它想象成一个窗口标题栏。

在我调用的 OnAttached 方法中:AssociatedObject.FindName(DragHandle) 但这返回 null。

然后我尝试处理 AssociatedObject 的 Loaded 事件并在那里运行我的代码,但我仍然得到一个 null 返回。

我是否误解了 FindName 能够做什么?AssociatedObject 在 ItemsControl 中(我想要一个可拖动元素的集合)。那么是否存在某种名称范围问题?

4

1 回答 1

1

是的,这听起来像是一个名称范围问题。有关 XAML 名称范围的MSDN 文档介绍了如何为模板和项控件定义名称操作。您是否为 ItemsControl 中的项目使用模板?

您可能只需要使用类似这样的方法递归地遍历可视化树,即可按名称找到正确的元素:

    private static FrameworkElement FindChildByName(FrameworkElement parent, string name)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            FrameworkElement child = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;

            if (child != null && child.Name == name)
            {
                return child;
            }
            else
            {
                FrameworkElement grandChild = FindChildByName(child, name);

                if (grandChild != null)
                {
                    return grandChild;
                }
            }
        }

        return null;
    }
于 2010-01-27T20:04:25.417 回答