Silverlight Border - я тупой? - PullRequest
       10

Silverlight Border - я тупой?

2 голосов
/ 05 августа 2009

извините, я не нашел ничего полезного при поиске в гугле. Очень простой вопрос, в основном "Я тупой". Я знаю, что StackPanel дает своим дочерним элементам полное пространство, но почему свойство "Auto" относится к элементу PARENT в случае границы. Я имею в виду, возможно, я делаю что-то не так, но это поведение определенно не то, что я намеревался:

Pic1 http://img6.imageshack.us/img6/171/20090805002723.jpg

Хорошо, подумав, я нашел способ, который выглядит так:

Серьезно http://img18.imageshack.us/img18/3173/20090805003045.jpg

Но на самом деле, так? Я имею в виду «элемент управления минимального размера» с текстовым полем (какую ширину я хочу определить) и рамкой вокруг него, и мне нужно такое дерево? Если у кого есть способ получше, пожалуйста, скажите мне ...

Chris

PS: И пока я пишу о хорошей композиции пользовательского интерфейса для Silverlight, и хотел привести простой пример ... Я просто говорю: Легендарный!

Ответы [ 3 ]

1 голос
/ 05 августа 2009

Определенно не глупо. Это может быть очень запутанным. Я считаю, что это помогает, думая о макете в WPF / Silverlight, думать сверху вниз от корня иерархии элементов управления, а не снизу вверх .

Это становится очевидным, когда вы думаете о работе панели стека. Он складывает свои дочерние элементы и устанавливает их ширину в ширину. Поэтому он переопределяет ширину вашей границы Авто. Холст, который вы позже обернули вокруг него, вообще не пытается переставить его дочерние элементы, и он не переопределяет их ширину, поэтому, хотя его ширина равна ширине панели стека, Auto на вашей границе теперь работает (по размеру соответствует его содержимому). , текстовое поле).

Ясно, как грязь?

Вот статья с более подробной информацией: http://msdn.microsoft.com/en-us/library/ms745058.aspx

И я настоятельно рекомендую книгу Криса Селлса и Яна Гриффитса WPF, чтобы разбираться в тонкостях макета WPF / Silverlight.

0 голосов
/ 07 августа 2009

Самый простой способ - избавиться от Stackpanel и просто использовать VerticalAlignment и HorizontalAlignment, чтобы держать его в верхнем левом углу. Затем просто установите ширину границы и оставьте ее в покое.

<Grid x:Name="LayoutRoot">

   <Border Width="150" BorderBrush="Blue" BorderThickness="1" VerticalAlignment="Top" HorizontalAlignment="Left">
      <TextBox Text="I'm Serious" Background="LightBlue" />
   </Border>

</Grid>
0 голосов
/ 05 августа 2009

Холста следует избегать, если только он не имеет смысла для того, что вы пытаетесь сделать. Например, Canvas обычно имеет смысл для игры или для чего-то, где вы хотите перетаскивать элементы. Здесь это только мешает вам.

Причины не использовать Canvas:

http://blogs.msdn.com/devdave/archive/2008/05/21/why-i-don-t-like-canvas.aspx

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