Может ли ScatterViewItem динамически изменять размер в соответствии с его содержимым?

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

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


person Community    schedule 30.03.2010    source источник


Ответы (1)


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

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

в разделе «Привязка к размеру контента»?

Привязка к размеру контента

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

В подобных случаях мы рекомендуем привязать размеры ScatterViewItem к размерам содержимого. Для этого вам необходимо определить объект Style (обычно в разделе «Ресурсы» главного окна приложения). В следующем примере кода показано объявление объекта Style, которое можно применить к элементу управления 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>
person Egor    schedule 12.07.2011