WPF视图框中的可滚动内容与“UniformToFill”

7
我可以帮助您进行翻译。以下是有关IT技术的内容,涉及WPF中如何使放置在Viewbox中、Stretch属性设置为UniformToFill的内容可滚动。
例如:
如何使设置了Stretch="UniformToFill"属性的WPF Viewbox中的内容可以滚动?
<Grid Height="500" Width="1000" >
  <ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" >
      <Viewbox Stretch="UniformToFill">
       ......

      </Viewbox>
   </ScrollViewer>
</Grid>

内容会根据目标尺寸调整大小,同时保持其原生宽高比。如果目标宽高比与源不同,则源内容被剪切以适应目标尺寸。
所以我尝试使用ScrollViewer来滚动到被剪切的源内容区域,但滚动条是可见但禁用的。

我尝试使用ClipToBounds="False",但没有帮助。


将Viewbox放在ScrollViewer中相当不常见。一个是调整内容大小以适应一定的空间,另一个则允许用户滚动查看超出空间的内容。也许你应该退后一步,描述一下你想要实现什么? - Robert Levy
1
@Robert Levy,Viewbox的内容由不可预测数量的其他控件组成。需要Viewbox来缩放内容,需要ScrollViewer来在内容被放大时访问该内容。 - rem
2个回答

17

ViewBox会根据其占用的尺寸调整其内容的大小。ScrollViewer会给其内容无限的宽度/高度以呈现。因此,当您将ViewBox放置在ScrollViewer内时,ViewBox认为自己有“全世界的所有空间”可拉伸。

此外,ViewBox使用渲染变换来拉伸内容,这意味着ScrollViewer永远不会知道内容的最终大小。

要使您的ScrollViewer正常工作,您必须在ViewBox上放置宽度/高度。它需要知道自己占用了多少空间。


0
你想要的大致上就是这个,我想。
<Viewbox Stretch="Fill" Height="800">
    <Grid Height="800">
        <ScrollViewer HorizontalScrollBarVisibility="auto" VerticalScrollBarVisibility="Disabled">
            <DockPanel>
                <dashboard:TotalizadoresControl 
                    DockPanel.Dock="Top"
                    DataContext="{Binding TotalizadoresContexto}" /> 
            </DockPanel>
        </ScrollViewer>
    </Grid>
</Viewbox>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接