2

我有以下 Xaml。我有一个包含一些“列标题”和一个列表框的网格。目前我的水平滚动条滚动列标题和列表框。我的垂直滚动条只滚动列表框,因为我希望列标题“冻结”。我遇到的问题是我必须一直滚动到右侧才能看到垂直滚动条。无论如何“锁定”垂直滚动条始终可见(在需要时)并且只滚动列表框?如果您需要更多信息,请告诉我。

<Grid Name="test1" Margin="0,0,50,0" Grid.Row="0">
    <ScrollViewer  VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" Width="{Binding ElementName=test1, Path=ActualWidth}">
        <Grid Name="grdMain"  >
            <Grid.RowDefinitions>
                <RowDefinition Height="10*" />
                <RowDefinition Height="90*" />
            </Grid.RowDefinitions>
                <StackPanel Grid.Row="0">
                    <ItemsControl  Name="ColumnHeaders" ..>
                    </ItemsControl>
                </StackPanel>
                <StackPanel Name="check" Grid.Row="1">
                    <ScrollViewer Height="{Binding ElementName=check, Path=ActualHeight}"  VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Hidden">
                        <ListBox   Name="lstDrop" ..>
                        </ListBox>
                    </ScrollViewer>
                </StackPanel>
            </Grid>
         </ScrollViewer>
                </Grid>

以下是当前功能的屏幕截图:

滚动不可见栏

滚动条可见

4

1 回答 1

0

最后,它有点像我想的那样糟糕。不过,这里有一些东西。我不得不对最初的想法和你的布局做一些改变,但之后它看起来都一样。

<Grid Name="test1" Margin="0,0,50,0" Grid.Row="0">
    <Grid Name="grdMain"  >
        <Grid.RowDefinitions>
            <RowDefinition Height="10*" />
            <RowDefinition Height="90*" />
        </Grid.RowDefinitions>
        <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" Name="scv_headers">
            <ItemsControl Name="ColumnHeaders">
                <!--Headers here-->
            </ItemsControl>
        </ScrollViewer>

        <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" ScrollChanged="List_OnScrollChanged">
            <ListBox Name="lstDrop">
                <!--Items here-->
            </ListBox>
        </ScrollViewer>
    </Grid>
</Grid>

因为滚动条隐藏在模板中,我不得不在后面添加一些代码

    private void List_OnScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        var scrollbarSrc = (ScrollBar)((ScrollViewer)e.OriginalSource).Template.FindName("PART_HorizontalScrollBar", (ScrollViewer)e.OriginalSource);

        scv_headers.ScrollToHorizontalOffset(scrollbarSrc.Value);
    }

因为你的堆栈面板只包含一个项目,所以我把它们放在一边,看起来几乎一样。

于 2013-03-25T13:42:00.383 回答