WPF ScrollViewer调整问题大小

时间:2011-05-10 15:33:51

标签: wpf layout

我在WPF窗口中有一个滚动查看器,无论我做什么,都会根据其内容调整大小。这是一个问题,因为它也会调整我的窗口大小,在我看来,它会失去滚动查看器的目的。

有问题的窗口将SizeToContent设置为“WidthAndHeight”,我知道可以设置为“手动”来解决滚动查看器问题,但是我必须调整窗口布局。

有没有办法在这里充分利用这两个世界?我想要的只是滚动查看器在内容发生变化时保持相同(当前)大小。

修改 如果你真的需要看到它......

<Window SizeToContent="WidthAndHeight">
  <Grid Width="200" Name="ThinkBeforeSpeaking">
    <ScrollViewer VerticalScrollBars="Auto" HorizontalScrollBars="Auto">
      <ContentControl Content={Binding AnythingYouCanImagine}"/>
    </ScrollViewer>
  </Grid>
</Window>

不需要是查看器内部的内容控件,只需要比任何维度中的窗口都大。

3 个答案:

答案 0 :(得分:3)

我自己刚刚遇到过这个问题,我找到了一个合适的解决方案,将ScrollViewer包装在Canvas中,这样它就不会参与测量传递,并告诉ScrollViewer使用ActualHeight和Canvas的ActualWidth使得它占用了Canvas的所有空间:

<Window SizeToContent="WidthAndHeight">
  <Grid Width="200" Name="ThinkBeforeSpeaking">
    <Canvas>
      <ScrollViewer VerticalScrollBars="Auto" HorizontalScrollBars="Auto"
        Height="{Binding Parent.ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}"
        Width="{Binding Parent.ActualWidth, Mode=OneWay, RelativeSource={RelativeSource Self}}">
        <ContentControl Content={Binding AnythingYouCanImagine}"/>
      </ScrollViewer>
    </Canvas>
  </Grid>
</Window>

就目前而言,没有任何迹象表明窗口有任何高度,因此任何一个现有控件(Window,Grid或Canvas)都需要定义Height / MinHeight,或者需要添加其他控件来提供他们自己的身高/敏感度。

答案 1 :(得分:0)

我假设你希望你的Window的大小足够大以适应它的内容,但如果内容发生变化则不会调整大小。

如果是这样,你需要在加载Window时重置SizeToContent选项,如下所示:

public MainWindow() {
    InitializeComponent();
    this.Loaded += (s, e) => { this.SizeToContent = SizeToContent.Manual; };
}

答案 2 :(得分:0)

在您的示例中,您正在使用Window的WidthAndHeight行为。窗口的宽度将扩展到您在网格上设置的200px,但是您无法控制窗口需要具有的高度。

因此,除非您为ScrollViewer或Grid(或者Window和ScrollViewer之间的任何其他容器)指定固定的Height或MaxHeight,否则Window的高度将调整为ScrollViewer的内容。

<Window SizeToContent="WidthAndHeight">
   <Grid Width="200" Height="150" Name="ThinkBeforeSpeaking">
      <ScrollViewer VerticalScrollBars="Auto" HorizontalScrollBars="Auto">
         <ContentControl Content={Binding AnythingYouCanImagine}"/>
      </ScrollViewer>
   </Grid>
</Window> 

想一想,窗户有哪些高度?没有?无穷?您的XAML中没有任何内容可以指定它。