В Silverlight CustomControl как вы можете расположить элементы этого элемента управления в соответствии с сеткой, содержащей элемент управления? - PullRequest
1 голос
/ 31 декабря 2010

Предположим, пользовательский элемент управления в Silverlight, который имеет три элемента TextBlock с именами Left, Middle и Right.Я хочу поместить элемент управления в сетку, которая имеет три столбца, и я хотел бы, чтобы положение этих элементов было таким же, как если бы я определил их встроенными с использованием синтаксиса Grid.Column = "x" с Grid.Rowвложенное свойство устанавливается в самом пользовательском элементе управления.

Или, если я полностью не в себе, каков наилучший способ достижения аналогичного результата.

Ответы [ 2 ]

1 голос
/ 31 декабря 2010

Я думаю, что вы, скорее всего, "вне базы". Целью пользовательского элемента управления является представление данных уникальным способом. Если вы хотите передать макет во внешнюю сетку, я бы посоветовал вам не вызывать пользовательский элемент управления.

Кажется более вероятным, что вам нужен класс, имеющий три свойства, к которым вы просто привязываете три TextBlocks. Без дальнейших подробностей трудно дать лучший совет.

Чтобы ответить на ваш актуальный вопрос, вы не можете. Вам нужно будет добавить отдельные элементы непосредственно в коллекцию «Сетка» для детей, чтобы сетка отвечала за их расположение. Это означает, что эти элементы не могут отображаться как дочерние визуальные элементы внутри вашего пользовательского элемента управления.

0 голосов
/ 31 декабря 2010

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

В вашем CustomControl вы переопределяете OnApplyTemplate. В этом методе вы можете найти три TextBlocks и установить значение Grid.Column, используя SetValue.

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();

    /// Find TextBlock named "Left"
    var left = GetTemplateChild("Left") as TextBlock;
    left.SetValue(Grid.ColumnProperty, 0);

    ...
}
...