HashCalculator.GUI/MainWindow.xaml.cs
2020-04-03 04:48:57 +02:00

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