57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
using System;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Threading;
|
|
|
|
namespace HashCalculator.GUI
|
|
{
|
|
/// <summary>
|
|
/// MainWindow.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
internal ViewModel ViewModel => (ViewModel)DataContext;
|
|
private bool _autoscroll = true;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
Translator.ProviderChanged += (s, e) => Dispatcher.Invoke(() =>
|
|
{
|
|
ViewModel.NotifyCsfChange();
|
|
});
|
|
}
|
|
|
|
private void OnButtomScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)
|
|
{
|
|
var scrollViewer = (ScrollViewer)sender;
|
|
// User scroll event : set or unset auto-scroll mode
|
|
if (e.ExtentHeightChange == 0)
|
|
{ // Content unchanged : user scroll event
|
|
if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight)
|
|
{ // Scroll bar is in bottom
|
|
// Set auto-scroll mode
|
|
_autoscroll = true;
|
|
}
|
|
else
|
|
{ // Scroll bar isn't in bottom
|
|
// Unset auto-scroll mode
|
|
_autoscroll = false;
|
|
}
|
|
}
|
|
|
|
// Content scroll event : auto-scroll eventually
|
|
if (_autoscroll && e.ExtentHeightChange != 0)
|
|
{ // Content changed and auto-scroll mode set
|
|
// Autoscroll
|
|
scrollViewer.ScrollToVerticalOffset(scrollViewer.ExtentHeight);
|
|
}
|
|
}
|
|
|
|
private void OnInitialized(object sender, EventArgs e)
|
|
{
|
|
ViewModel.StartTracerListener(s => Dispatcher.BeginInvoke(s));
|
|
}
|
|
}
|
|
}
|