1

10項目のリストボックスがあります。デフォルトでは垂直スクロールが有効になっており、最初の 3 つの項目が表示されます。顧客は、「UP」と「DOWN」の 2 つのボタンを追加して、ボタンをクリックするとリスト ボックスに次の 3 つの項目が表示されるようにすることを望んでいます。

たとえば、アイテム4、アイテム5、アイテム6を「下」クリックして表示したい。

ここに画像の説明を入力

デフォルトのWPFコントロールのリストボックスとスクロールビューをどのように行うことができますか?

4

2 に答える 2

1

ScrollViewer.ScrollToVerticalOffsetメソッド(msdn )を使用できます。

例:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20" />
        <RowDefinition Height="50" />
        <RowDefinition Height="20" />
        <RowDefinition Height="25" />
    </Grid.RowDefinitions>

    <Button x:Name="btnUp" Content="UP" Click="btnUp_Click" />

    <ScrollViewer x:Name="scroll" Grid.Row="1">
        <ListBox x:Name="lbData">
            <ListBoxItem>Item1</ListBoxItem>
            <ListBoxItem>Item2</ListBoxItem>
            <ListBoxItem>Item3</ListBoxItem>
            <ListBoxItem>Item4</ListBoxItem>
            <ListBoxItem>Item5</ListBoxItem>
            <ListBoxItem>Item6</ListBoxItem>
            <ListBoxItem>Item7</ListBoxItem>
            <ListBoxItem>Item8</ListBoxItem>
            <ListBoxItem>Item9</ListBoxItem>
            <ListBoxItem>Item10</ListBoxItem>
        </ListBox>
    </ScrollViewer>

    <Button x:Name="btnDown" Content="Down" Click="btnDown_Click" Grid.Row="2" />

    <StackPanel Grid.Row="3" Orientation="Horizontal">
        <TextBlock Text="Start with:" Margin="2" />
        <ComboBox x:Name="cbIndex" Loaded="cbIndex_Loaded" Margin="2" />
        <Button x:Name="btnGo" Content="GO" Click="btnGo_Click" Margin="2" />
    </StackPanel>
</Grid>

コードビハインド:

private void btnUp_Click(object sender, RoutedEventArgs e)
{
    scroll.ScrollToVerticalOffset(scroll.VerticalOffset - 50);
}

private void btnDown_Click(object sender, RoutedEventArgs e)
{
    scroll.ScrollToVerticalOffset(scroll.VerticalOffset + 50);
}

public double GetOffset(int itemIndex)
{
    double result = 0;           
    for (int i = 0; i < itemIndex; i++)
    {
        result += (lbData.Items[i] as ListBoxItem).ActualHeight;
    }

    return result;
}

private void cbIndex_Loaded(object sender, RoutedEventArgs e)
{
    cbIndex.ItemsSource = Enumerable.Range(1, lbData.Items.Count);
}

private void btnGo_Click(object sender, RoutedEventArgs e)
{
    scroll.ScrollToVerticalOffset(GetOffset(cbIndex.SelectedIndex));
}
于 2013-02-19T17:34:31.950 に答える