ScatterViewItem可以动态调整大小以适应其内容吗?

时间:2010-03-30 22:09:37

标签: pixelsense

我们在ScatterViewItem内部托管一个控件,该控件在运行时动态更改其大小,因为添加,删除和/或折叠了各种子元素。我们希望托管ScatterViewItem也可以调整大小以适应其子控件,但我们很难实现这一点。我们已经尝试了很多不同的东西,我们最接近的是挂接到子控件的SizeChanged事件并明确设置ScatterViewItem的宽度和高度,但这种方法仍有问题。

在XAML中定义ScatterViewItem及其内容时,ScatterViewItem的大小适当。我们希望在其内容更改大小时在运行时强制执行相同的行为。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试过设置此处描述的样式:

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

在“绑定到内容大小”下?

  

绑定到内容大小

     

如ScatterView概述中所述,默认情况下为ScatterViewItem   不一定扩展或缩小到其内容的大小。   您可以显式设置a的高度和宽度属性   ScatterViewItem,但有时你的内容可能是一个控件   未知大小,或者您的内容可能有不同的大小。

     

在这种情况下,我们建议您绑定的尺寸   ScatterViewItem到内容的维度。要做到这一点,你需要   定义一个Style对象(通常在你的的Resources部分中)   主要应用窗口)。以下代码示例显示了一个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>