Wpf:使用滚动位置更新内容

时间:2014-05-27 00:13:21

标签: c# wpf

你有一个堆叠面板,有许多垂直排列的按钮。按钮包含日期或时间。它们混合在一起:“星期一”,“下午1点”,“晚上7点”,“星期二”,“下午3点”,“晚上11点”,“星期三”。您可以使用滚动查看器向下滚动按钮列表。

棘手的部分:顶部按钮必须始终显示一天(即“星期二”)而不是时间。这是为了在向下滚动时知道时间属于哪一天。例如:如果您向下滚动一个按钮,示例将显示:“下午1点”,“晚上7点”,“周二”,“下午3点”,“晚上11点”,“周三”。如果不向上滚动,你就不会知道下午1点属于哪一天。

这是我到目前为止所做的:

XAML:

<DockPanel>
    <Button DockPanel.Dock="Top" Content="Monday" Background="Red"/>
    <Grid>
        <ScrollViewer Name="sv1" CanContentScroll="True" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">
            <StackPanel Name="sp1">
                <Button Content="1pm"/>
                <Button Content="7pm"/>
                <Button Content="Tuesday" Background="Red"/>
                <Button Content="3pm"/>
                <Button Content="11pm"/>
                <Button Content="Wednesday" Background="Red"/>
            </StackPanel>
        </ScrollViewer>
    </Grid>
</DockPanel>

C#

public partial class myWindow : Window
{        
    public myWindow()
    {
        InitializeComponent();
    }

    //"Logical scrolling"
    private void spLineUp(object sender, RoutedEventArgs e)
    {
        ((IScrollInfo)sp1).LineUp();
    }
    private void spLineDown(object sender, RoutedEventArgs e)
    {
        ((IScrollInfo)sp1).LineDown();
    }
}

如何使用滚动位置更改内容?

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我找到了一个名为“VerticalOffset”的属性,用于跟踪逻辑滚动中的行。知道行号然后允许更新内容。

C#

    private void sChanged(object sender, ScrollChangedEventArgs e)
    {
        TopButton.Content = e.VerticalOffset.ToString();
    }

XAML

    <Button DockPanel.Dock="Top" Content="Date" Background="Red" Name="TopButton"/>
    <Grid>
        <ScrollViewer Name="sv1" VerticalScrollBarVisibility="Visible" CanContentScroll="True" ScrollChanged="sChanged">
            <StackPanel Name="sp1">
            </StackPanel>
        </ScrollViewer>
    </Grid>