Я создаю диалоговый класс Silverlight, который более дружественен к MVVM.Класс ChildWindow
имеет некоторую неловкость, что затрудняет управление из модели представления.
Это означает, что мне нужно объявить свой собственный пользовательский интерфейс.У меня есть все традиционные элементы, включая Popup
элемент управления и оверлей с непрозрачностью 50%.Поведение открытия / закрытия также работает.
Проблема, с которой я сталкиваюсь, состоит в том, что мой шаблон управления не препятствует росту тела диалога в ответ на ввод пользователя в TextBox
.Когда количество символов превышает размер по умолчанию, все тело диалога растягивается горизонтально.Очевидно, что это не нормальное поведение.
То, что я хотел бы достичь, - это способ для тела диалога соответствующим образом изменять размер содержимого, но не расширять или сокращать его в ответ на дочерние элементы управления, которые требуют больше или меньше места.,Вот как ведет себя элемент управления ChildWindow
, но я проверил его шаблон и не могу определить, как это работает.
Я думаю, что вижу поведение расширения, потому что мой шаблонна основе Grid
s, которые позволяют дочерним элементам управления столько размера, сколько они запрашивают.Я попытался несколько перестановок StackPanel
, ScrollViewer
и других макетов безуспешно.У кого-нибудь есть представление о том, как ChildWindow
выполняет свою статическую компоновку с размером контента или, возможно, другое предложение?
Вот шаблон, который у меня есть до сих пор, разобраный до базовых элементов:
<Popup>
<Grid x:Name="overlay">
<Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
...Title...
</Grid>
<Grid Grid.Row="1">
<ContentControl Content="{TemplateBinding DialogBody}" />
</Grid>
</Grid>
</Border>
</Grid>
</Popup>
Когда DialogBody
содержит TextBox
или что-либо еще, что изменяет размер макета, например скрытые элементы управления, весь контент Popup
увеличивается.Я не хочу прибегать к статической ширине и высоте, потому что я хочу, чтобы размер диалога автоматически соответствовал телу диалога, , но только изначально .