AssociatedObject.FindName в поведении Silverlight Метод OnAttached возвращает ноль - PullRequest
0 голосов
/ 27 января 2010

Я настраиваю поведение Silverlight, чтобы включить перетаскивание элемента с помощью элемента «перетаскивания» (а не перетаскивания всего элемента) Думайте об этом как о строке заголовка окна.

В методе OnAttached я вызываю: AssociatedObject.FindName (DragHandle) но это возвращает ноль.

Затем я попытался обработать событие AssociatedObject Loaded и запустить там свой код, но я все еще получаю ноль.

Неужели я неправильно понимаю, что умеет FindName? AssociatedObject находится в ItemsControl (я хочу коллекцию перетаскиваемых элементов). Так есть ли какая-то проблема с именной областью?

1 Ответ

1 голос
/ 27 января 2010

Да, это звучит как проблема с областью имен. В документации MSDN по именным областям XAML рассказывается, как определяются именные области для шаблонов и элементов управления. Вы используете шаблон для элементов в 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...