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}" /> <cc:HyperLink x:Name="SeeMore" Text="{DynamicResource seeMoreReleaseNotes}" />
</Grid> </Grid>
<mdxam:MarkdownScrollViewer <!-- Do not use scroll function of MarkdownViewer because it does not support smooth scroll -->
x:Name="MarkdownViewer" <ScrollViewer
x:Name="MarkdownScrollViewer"
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="5" Grid.ColumnSpan="5"
Width="500" Width="500"
Height="500" Height="500">
Margin="15 0 20 0" <mdxam:MarkdownScrollViewer
ClickAction="SafetyDisplayWithRelativePath" x:Name="MarkdownViewer"
Loaded="MarkdownViewer_Loaded" Margin="15 0 20 0"
Plugins="{StaticResource MdXamlPlugins}" HorizontalAlignment="Stretch"
Visibility="Collapsed" /> 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. --> <!-- This Grid is for display progress ring and refresh button. -->
<!-- And it is also for changing the size of the MarkdownViewer. --> <!-- 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
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"

View file

@ -24,6 +24,25 @@ namespace Flow.Launcher
ModernWpf.ThemeManager.Current.ActualApplicationThemeChanged += ThemeManager_ActualApplicationThemeChanged; 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 #region Window Events
private void Window_Loaded(object sender, RoutedEventArgs e) private void Window_Loaded(object sender, RoutedEventArgs e)
@ -162,6 +181,8 @@ namespace Flow.Launcher
#endregion #endregion
#region Control Events
private void MarkdownViewer_Loaded(object sender, RoutedEventArgs e) private void MarkdownViewer_Loaded(object sender, RoutedEventArgs e)
{ {
RefreshMarkdownViewer(); 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) private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{ {
MarkdownViewer.Height = e.NewSize.Height; MarkdownScrollViewer.Height = e.NewSize.Height;
MarkdownViewer.Width = e.NewSize.Width; 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
} }
} }