Silverlight 4: Как получить доступ к контролю, созданному из кода - PullRequest
3 голосов
/ 26 мая 2011

Я пытаюсь создать метод для рисования линии (пути) между двумя элементами UserControls.Я нашел сообщение от кого-то, который дал мне общий указатель о том, как это сделать, я успешно реализовал код и начал адаптировать его под свои нужды.

У меня проблема с доступом к пользовательскому элементу управления:

Button b2 = new Button();
var transform2 = b2.TransformToVisual(b2.Parent as UIElement);

Работает как следует, но мои кнопки создаются динамически с помощью метода, поэтому я не могу получить к ним доступ как "b2".

Я попробовал следующее:

var transfrom3 = canvas1.Children[0].TransformToVisual(canvas1.Children[0].Parent as UIElement);

, но при таком доступе я получаю сообщение об ошибке .Parent.

Если также пытался:

                var p1 = this.FindName(ps.ProcessID.ToString());
                var p2 = this.FindName(ps.PreID.ToString());

                ////get geo data from both controls
                var transform1 = p1.TransformToVisual(p1.Parent as UIElement);
                var transform2 = p2.TransformToVisual(p2.Parent as UIElement);

Может кто-нибудь сказать мне, как я могу получить доступ к этим элементам управления пользователя?

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Хм Я не видел, чтобы вы изменили UIElement на FrameworkElement, у меня сейчас работает эта настройка:

                var control1 = this.FindName(ps.ProcessID.ToString()) as FrameworkElement;
                var control2 = this.FindName(ps.PreID.ToString()) as FrameworkElement;
                var transform1 = control1.TransformToVisual(control1.Parent as UIElement);
                var transform2 = control2.TransformToVisual(control2.Parent as UIElement);

Если я добавлю элемент управления в переменную как FrameworkElement, тогда я смогу снова использовать .Parent для этого элемента управления.

Спасибо за ответ, Энтони!

0 голосов
/ 26 мая 2011

Эта строка должна работать: -

var transfrom3 = canvas1.Children[0].TransformToVisual(canvas1.Children[0].Parent as FrameworkElement);

, как вы обнаружили, UIElement не имеет Parent, это FrameworkElement, которое добавляет свойство Parent.

Однако было бы лучше получить доступ к элементу управления через его имя (я предполагаю, что вы назначаете Name для динамически добавленных элементов управления).

Это: -

var p1 = this.FindName(ps.ProcessID.ToString());

должно работать, предполагая, что this равно UserControl, а рассматриваемому FrameworkElement было присвоено соответствующее имя в code : -

canvas1.Children.Add(new Button() {Name = ps.ProcessID.ToString(), Content="Hello"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...