你必須使用ScrollBar
而不是ScrollViewer
因爲當它到達其內容的末尾ScrollViewer
不能告訴。 (或者至少我還沒有看到這樣做的可靠方法)。另一方面ScrollBar
更適合這些類型的操作。
我用一個ListBox與幾個項目來測試這種行爲。你可以改變它到任何你需要的。
的XAML:
<Grid>
<ListBox ScrollBar.Scroll="ListBox_Scroll">
<!-- add many items here -->
<TextBlock Text="something"/>
</ListBox>
<Image Source="Shadow.png" VerticalAlignment="Top">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding ScrollerState}"
Value="{x:Static enum:ScrollState.AtTheTop}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Image Source="Shadow.png" VerticalAlignment="Bottom">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding ScrollerState}"
Value="{x:Static enum:ScrollState.AtTheBottom}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Grid>
正如你看到的,我改變了觸發DataTrigger
和使用的DataContext一個綁定屬性(名爲ScrollerState
與ScrollState
型這是一種簡單枚舉)結合。
枚舉:
public enum ScrollState
{
AtTheTop, AtTheBottom, InBetween
}
現在,在後面的代碼,我們實行的地方,我們改變ScrollerState
值Scroll事件:
public MainWindow()
{
InitializeComponent();
DataContext = new VM();
}
private void ListBox_Scroll(object sender, ScrollEventArgs e)
{
ScrollBar sb = e.OriginalSource as ScrollBar;
if (sb.Orientation == Orientation.Horizontal)
return;
if (sb.Value == 0)
(DataContext as VM).ScrollerState = ScrollState.AtTheTop;
else if (sb.Value == sb.Maximum)
(DataContext as VM).ScrollerState = ScrollState.AtTheBottom;
else
(DataContext as VM).ScrollerState = ScrollState.InBetween;
}
VM(這方面的一個實例被設置爲在DataContext窗口):
public class VM : DependencyObject
{
public ScrollState ScrollerState
{
get { return (ScrollState)GetValue(ScrollerStateProperty); }
set { SetValue(ScrollerStateProperty, value); }
}
public static readonly DependencyProperty ScrollerStateProperty =
DependencyProperty.Register("ScrollerState", typeof(ScrollState), typeof(VM),
new PropertyMetadata(ScrollState.AtTheTop));
}
我認爲這可能(至少部分)回答你的問題:http://stackoverflow.com/questions/10793717/how-to-find-that-scrollviewer-is-scrolled-to-the-end-in- wpf – thomasb 2015-02-23 16:48:02