Support smooth scroll

This commit is contained in:
Jack251970 2025-06-07 23:23:45 +08:00
parent a9eb17ee50
commit 4436a1efee
2 changed files with 68 additions and 30 deletions

View file

@ -166,22 +166,32 @@
<cc:HyperLink x:Name="SeeMore" Text="{DynamicResource seeMoreReleaseNotes}" />
</Grid>
<mdxam:MarkdownScrollViewer
x:Name="MarkdownViewer"
<!-- Do not use scroll function of MarkdownViewer because it does not support smooth scroll -->
<ScrollViewer
x:Name="MarkdownScrollViewer"
Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="5"
Width="500"
Height="500"
Margin="15 0 20 0"
ClickAction="SafetyDisplayWithRelativePath"
Loaded="MarkdownViewer_Loaded"
Plugins="{StaticResource MdXamlPlugins}"
Visibility="Collapsed" />
Height="500">
<mdxam:MarkdownScrollViewer
x:Name="MarkdownViewer"
Margin="15 0 20 0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ClickAction="SafetyDisplayWithRelativePath"
HorizontalScrollBarVisibility="Disabled"
Loaded="MarkdownViewer_Loaded"
MouseWheel="MarkdownViewer_MouseWheel"
Plugins="{StaticResource MdXamlPlugins}"
PreviewMouseWheel="MarkdownViewer_PreviewMouseWheel"
VerticalScrollBarVisibility="Disabled"
Visibility="Collapsed" />
</ScrollViewer>
<!-- This Grid is for display progress ring and refresh button. -->
<!-- And it is also for changing the size of the MarkdownViewer. -->
<!-- Because VerticalAlignment="Stretch" can cause size issue with MarkdownViewer. -->
<!-- Because VerticalAlignment="Stretch" can cause size issue with MarkdownScrollViewer. -->
<Grid
Grid.Row="2"
Grid.Column="0"

View file

@ -24,6 +24,25 @@ namespace Flow.Launcher
ModernWpf.ThemeManager.Current.ActualApplicationThemeChanged += ThemeManager_ActualApplicationThemeChanged;
}
private void ThemeManager_ActualApplicationThemeChanged(ModernWpf.ThemeManager sender, object args)
{
Application.Current.Dispatcher.Invoke(() =>
{
if (ModernWpf.ThemeManager.Current.ActualApplicationTheme == ModernWpf.ApplicationTheme.Light)
{
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeLight"];
MarkdownViewer.Foreground = Brushes.Black;
MarkdownViewer.Background = Brushes.White;
}
else
{
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeDark"];
MarkdownViewer.Foreground = Brushes.White;
MarkdownViewer.Background = Brushes.Black;
}
});
}
#region Window Events
private void Window_Loaded(object sender, RoutedEventArgs e)
@ -162,6 +181,8 @@ namespace Flow.Launcher
#endregion
#region Control Events
private void MarkdownViewer_Loaded(object sender, RoutedEventArgs e)
{
RefreshMarkdownViewer();
@ -196,29 +217,36 @@ namespace Flow.Launcher
});
}
private void ThemeManager_ActualApplicationThemeChanged(ModernWpf.ThemeManager sender, object args)
{
Application.Current.Dispatcher.Invoke(() =>
{
if (ModernWpf.ThemeManager.Current.ActualApplicationTheme == ModernWpf.ApplicationTheme.Light)
{
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeLight"];
MarkdownViewer.Foreground = Brushes.Black;
MarkdownViewer.Background = Brushes.White;
}
else
{
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeDark"];
MarkdownViewer.Foreground = Brushes.White;
MarkdownViewer.Background = Brushes.Black;
}
});
}
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
MarkdownViewer.Height = e.NewSize.Height;
MarkdownViewer.Width = e.NewSize.Width;
MarkdownScrollViewer.Height = e.NewSize.Height;
MarkdownScrollViewer.Width = e.NewSize.Width;
}
private void MarkdownViewer_MouseWheel(object sender, MouseWheelEventArgs e)
{
RaiseMouseWheelEvent(sender, e);
}
private void MarkdownViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
RaiseMouseWheelEvent(sender, e);
}
private void RaiseMouseWheelEvent(object sender, MouseWheelEventArgs e)
{
e.Handled = true; // Prevent the inner control from handling the event
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = UIElement.MouseWheelEvent,
Source = sender
};
// Raise the event on the parent ScrollViewer
MarkdownScrollViewer.RaiseEvent(eventArg);
}
#endregion
}
}