Может ли ScatterViewItem динамически изменять размер, чтобы соответствовать его содержимому? - PullRequest
2 голосов
/ 31 марта 2010

Мы размещаем элемент управления внутри ScatterViewItem, который динамически изменяет свой размер во время выполнения в результате добавления, удаления и / или свертывания различных подэлементов. Мы хотели бы, чтобы размер ScatterViewItem хостинга также изменялся, чтобы он соответствовал его дочерним элементам управления, но нам трудно это осуществить. Мы пробовали несколько разных вещей, и самое близкое, что мы получили, - это подключиться к событию SizeChanged дочернего элемента управления и явно установить ширину и высоту ScatterViewItem, но этот подход все еще имеет проблемы.

Когда вы определяете ScatterViewItem и его содержимое в XAML, ScatterViewItem имеет соответствующий размер. Мы хотели бы заставить то же поведение во время выполнения, когда его содержимое меняет размер. Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

1 голос
/ 12 июля 2011

Вы пробовали установить стиль, описанный здесь:

http://msdn.microsoft.com/en-us/library/ee957369.aspx

в разделе «Привязка к размеру содержимого»?

Привязка к размеру содержимого

Как описано в ScatterView Overview, по умолчанию ScatterViewItem не обязательно расширяется или сжимается до размера своего контента. Вы можете явно установить свойства высоты и ширины ScatterViewItem, но иногда ваш контент может быть неизвестный размер, или ваш контент может иметь переменный размер.

В таких случаях мы рекомендуем вам привязать размеры ScatterViewItem для размеров содержимого. Для этого вам нужно определить объект стиля (обычно в разделе ресурсов вашего главное окно приложения). В следующем примере кода показан стиль объявление объекта, которое можно применить к элементу управления ScatterViewItem для заставить его привязаться к размерам его содержания.

<Style x:Key="ScatterViewItemStyle" TargetType="{x:Type s:ScatterViewItem}">
    <Setter Property="MinWidth" Value="{Binding Path=Content.MinWidth, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
    <Setter Property="MinHeight" Value="{Binding Path=Content.MinHeight, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
    <Setter Property="MaxWidth" Value="{Binding Path=Content.MaxWidth, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
    <Setter Property="MaxHeight" Value="{Binding Path=Content.MaxHeight, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
    <Setter Property="Width" Value="{Binding Path=Content.Width, RelativeSource={RelativeSource Self}, Mode=TwoWay}"/>
    <Setter Property="Height" Value="{Binding Path=Content.Height, RelativeSource={RelativeSource Self}, Mode=TwoWay}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type s:ScatterViewItem}">
                <ContentPresenter />
            </ControlTemplate>
        </Setter.Value>
    </Setter> </Style>

Когда вы хотите создать ScatterViewItem, который использует размеры примените стиль к ScatterViewItem, как показано на следующий пример кода.

<s:ScatterViewItem Style="{StaticResource ScatterViewItemStyle}">
     <Rectangle  Height="250" Width="250" Fill="Red" /> </s:ScatterViewItem>
...