在2个不同的滚动查看器中添加项目

时间:2017-11-19 20:00:34

标签: c# wpf scrollviewer

我有一个网格分为4个网格A,B,C& D.我需要为2个网格A和B启用水平滚动查看器。但是,我需要为2个网格B和B启用垂直滚动查看器。 D.如何在第一个水平滚动查看器和第二个垂直滚动查看器中包含网格B? 非常感谢。

enter image description here

编辑:最大化窗口始终使其位于窗口的左上部,如下图所示:

enter image description here

这里是我添加的代码,用于确保最大化窗口远离左上区域。但是,这个问题没有任何改变!

    private void Window_StateChanged(object sender, EventArgs e)
    {
        if (this.WindowState == WindowState.Maximized)
        {
        //   Left = System.Windows.SystemParameters.WorkArea.Width - Width;
           Left = 200;
         //  Top = System.Windows.SystemParameters.WorkArea.Height - Height;
          Top = 200;          
        }
    }

保持窗口居中于最大化模式的任何提示?非常感谢提前。

1 个答案:

答案 0 :(得分:1)

我假设你对UniformGrid并不感兴趣,而是寻找一种在水平ScrollViewer中有一个垂直ScrollViewer的方法。

此代码为您提供2x2网格: 一个B. C D

添加的第一个元素是一个水平ScrollViewer,它跨越A和C,这个元素分为两个,底部有一个垂直的ScrollViewer。 B和D中的元素是简单元素。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <ScrollViewer Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <Image Grid.Row="0" Source="http://via.placeholder.com/1000x1000"/>
            <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                <Image Source="http://via.placeholder.com/1000x1000"/>
            </ScrollViewer>
        </Grid>
    </ScrollViewer>

    <Image Grid.Column="1" Grid.Row="0" Source="http://via.placeholder.com/1000x1000"/>
    <Image Grid.Column="1" Grid.Row="1" Source="http://via.placeholder.com/1000x1000"/>
</Grid>

修改

这是一个符合编辑要求的新代码。

XAML

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <ScrollViewer x:Name="A" Grid.Column="0" Grid.Row="0" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" ScrollChanged="A_ScrollChanged">
        <Image Stretch="None" Source="http://lorempixel.com/1000/1000/"/>
    </ScrollViewer>
    <ScrollViewer x:Name="B" Grid.Column="0" Grid.Row="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" ScrollChanged="B_ScrollChanged">
        <Image Stretch="None" Source="http://lorempixel.com/1000/1000/"/>
    </ScrollViewer>

    <ScrollViewer x:Name="C" Grid.Column="1" Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible">
        <Image Stretch="None" Source="http://lorempixel.com/1000/1000/"/>
    </ScrollViewer>
    <ScrollViewer x:Name="D" Grid.Column="1" Grid.Row="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible" ScrollChanged="D_ScrollChanged">
        <Image Stretch="None" Source="http://lorempixel.com/1000/1000/"/>
    </ScrollViewer>
</Grid>

背后的代码

    private void A_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        B.ScrollToHorizontalOffset(e.HorizontalOffset);
    }

    private void B_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        A.ScrollToHorizontalOffset(e.HorizontalOffset);
        D.ScrollToVerticalOffset(e.VerticalOffset);
    }

    private void D_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        B.ScrollToVerticalOffset(e.VerticalOffset);
    }