Динамически контролирует размер, но запрещает подгонку к контенту - PullRequest
1 голос
/ 18 августа 2010

У меня возникают проблемы, связанные с получением свойства «привязка влево и вправо» из WinForms в Silverlight.

Вот XAML, показывающий мою проблему:

        <Grid Width="400" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"  />
               <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

             <TextBlock Grid.Column="0" Text="Some label" />
             <TextBox Grid.Column="1" />
         <Grid>

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

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

Может быть, есть простое свойство, которое я пропустил.

РЕДАКТИРОВАТЬ : Извините, я пропустил важный элемент в XAML (бит Grid.Column=): (

Я знаю размерные свойства SL (Star, Auto, Pixel). Моя ошибка сделала неясным, чего я хотел достичь.

В исправленном примере TextBox заполнит Grid, но при наборе очень длинного текста он увеличится за пределы Grid.

Приветствие.

Ответы [ 2 ]

0 голосов
/ 18 августа 2010

В столбце Silverlight определения столбцов и строк:

  • Пиксель - означает «сделай мне точный размер»
  • Авто - означает «изменить размер, чтобы соответствовать наибольшему дочернему объекту в этом столбце / строке» и
  • Звезда - означает «дайте мне долю остатка после того, как Pixel и Auto получат свою долю».

По умолчанию, если ни один из них не указан, является звездой.

«Звезда» использует числа, которые относятся только к другим звездным столбцам / строкам и не имеют абсолютного значения. Два столбца с 1 * и 2 * совпадают с 1000 * и 2000 *. По сути, они будут занимать 1/3 и 2/3 любого пространства, оставшегося после столбцов / строк Pixel и Auto.

Согласно другому ответу, если вы хотите фиксированную ширину, которая является процентом от сетки, вы хотите звездный столбец. Не автоматический столбец, размер которого будет соответствовать растущему текстовому полю, как вы нашли.

0 голосов
/ 18 августа 2010

Если я не понимаю ваш вопрос, все, что вам нужно сделать, это избавиться от <ColumnDefinition Width="Auto" />. Ваши TextBox и TextBlock находятся в первом столбце Grid, для которого установлено значение Авто. Если вы избавитесь от определения первого столбца, они будут находиться в звездном столбце, который заполнит всю область, но не позволит им изменить размер своего содержимого.

EDIT

Вы пробовали установить HorizontalAlignment="Stretch" VerticalAlignment="Stretch" на вас TextBox? Это должно привести к тому, что TextBox будет использовать фиксированный размер, а не изменять размер в зависимости от содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...