Выберите максимальную ширину двух элементов управления и назначьте их им в Silverlight. - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть 2 элемента управления, каждый из которых имеет динамическое содержимое, поэтому их ширина установлена ​​на auto. Но я хочу выровнять их, и мне нужно каким-то образом связать их ширину.

Так, например, Control_1 имеет ширину auto. После события Loaded его размер становится 200. Другой Cotnrol_2 становится 250. И мне нужно сначала контролировать его ширину до 250.

Любые идеи приветствуются.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Я бы так поступил, обработав событие SizeChanged на ваших двух элементах управления. Я бы связал это событие на обоих элементах управления с обработчиком событий, таким как:

void ControlAOrB_SizeChanged(object sender, SizeChangedEventArgs e)
{
    double maxWidth = Math.Max(controlA.ActualWidth, controlB.ActualWidth);
    controlA.Width = maxWidth;
    controlB.Width = maxWidth;
}

Я не тестировал этот код, поэтому я не знаю, приведет ли установка Width элемента управления к уже имеющейся ширине, что вызовет другое событие SizeChanged, снова вызовет этот обработчик события и, следовательно, приведет к бесконечной рекурсии , Поэтому может быть целесообразно установить ширину элемента управления на maxWidth, только если она в настоящее время меньше maxWidth.

Я не думаю, что подход, использующий связывание, работает здесь особенно хорошо. Свойство ActualWidth FrameworkElement возвращает фактическую ширину, с которой был обработан элемент управления, но вы не можете привязаться к ActualWidth, поскольку это не свойство зависимости.

0 голосов
/ 22 декабря 2011

Почему бы вам не связать свойства width со свойствами ViewModel.Таким образом, если изменяется одно свойство ширины, в зависимости от его значения вы можете изменить ширину другого свойства, и оно будет отражено в элементе управления.

...