Как разрешить всплывающему окну Silverlight изменять его содержимое, но не допустить его роста? - PullRequest
0 голосов
/ 03 апреля 2011

Я создаю диалоговый класс 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 увеличивается.Я не хочу прибегать к статической ширине и высоте, потому что я хочу, чтобы размер диалога автоматически соответствовал телу диалога, , но только изначально .

1 Ответ

1 голос
/ 03 апреля 2011

Не уверен, что это Ват, который вы хотите ..., но Если вы не регистрируетесь для события Loaded «overlay» и nad, когда Load запустит, установите высоту и ширину «overlay» ActualHeight и ActualWidth соответственно. Таким образом, элемент управления получит желаемый размер и не изменится после этого.

EDIT: Вы можете использовать это, чтобы сделать это декларативным способом.

  <Grid.Triggers>
                <EventTrigger RoutedEvent="Grid.Loaded">
                        <BeginStoryboard>
                            <Storyboard x:Name ="setWidth">
                                <DoubleAnimation Storyboard.TargetName="overlay" Storyboard.TargetProperty="Width" From="0" To="{Binding ActualWidth, ElementName=overlay}"/>
                                <DoubleAnimation Storyboard.TargetName="overlay" Storyboard.TargetProperty="Height" From="0" To="{Binding ActualHeight, ElementName=overlay}"/>
                            </Storyboard>
                        </BeginStoryboard>
                </EventTrigger>
            </Grid.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...