我有一个ViewBox,其中包含一些在调整窗口大小时要拉伸的堆栈面板。我可以使用属性Stretch="UniformToFill"
来获得此行为
但是,调整大小会导致某些项目超出窗口范围,因此我实现了ScrollViewer来解决此问题。
垂直滚动条可以正常工作,但是一旦启用水平滚动条,视图框就会停止拉伸。
我研究并尝试解决此问题,提出了2个解决方案,但没有一个起作用:
xaml中的解决方案:
<ScrollViewer HorizontalScrollBarVisibility="Auto" >
<Viewbox x:Name="MainViewBox" Stretch="UniformToFill" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=ActualWidth}" >
...
</Viewbox>
</ScrollViewer>
此解决方案在保持拉伸特性的同时显示了水平条,但是在调整大小时滚动条不会更改大小,这使它无用。
在C#中使用代码的解决方案(在xaml代码中定义了滚动条之后):
bool need_scrollbarH = false;
private void ScrollViewer_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (((ScrollViewer)sender).ActualWidth < MainViewBox.ActualWidth)
need_scrollbarH = true;
}
private void hScrollBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (need_scrollbarH)
{
this.Left = (hScrollBar.Value - hScrollBar.Minimum) / (hScrollBar.Maximum - hScrollBar.Minimum) * (this.Width);
}
}
我尝试使用此代码移动窗口的内容,但它只移动了整个窗口的位置...
我的解决方案用光了,希望有人能对此提供一些见识。
我不能共享整个代码或设计,但这是文档概述: Document Outline 和一般的设计: Design