如何在保持ScrollViewer内ViewBox的UniformToFill属性的同时使用水平滚动条?

时间:2018-07-10 09:45:27

标签: c# wpf xaml

我有一个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

0 个答案:

没有答案
相关问题