2

I have the following Xaml. I have a grid containing some "columnheaders" and a list box. Currently my horizontal scroll bar scroll both the column headers and the listbox. My vertical scroll bar only scrolls the listbox as I want the column header "frozen". The issue I have is that I have to scroll all the way to the right to see the vertical scroll bar. Is there anyway of "locking" the vertical scroll bar to be always visible ( when its required ) and for it to only scroll the listbox? Please let me know if you need anymore information.

<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>

Here are screen shots of current functionality:

Scrolling without bar visible

Scrolling with bar visible

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);
    }

スタックパネルにはアイテムが 1 つしか含まれていないため、ほとんど同じように見えるそれらを除外しました。

于 2013-03-25T13:42:00.383 に答える