Skip to content

Commit 4436a1e

Browse files
committed
Support smooth scroll
1 parent a9eb17e commit 4436a1e

File tree

2 files changed

+66
-28
lines changed

2 files changed

+66
-28
lines changed

Flow.Launcher/ReleaseNotesWindow.xaml

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,22 +166,32 @@
166166
<cc:HyperLink x:Name="SeeMore" Text="{DynamicResource seeMoreReleaseNotes}" />
167167
</Grid>
168168

169-
<mdxam:MarkdownScrollViewer
170-
x:Name="MarkdownViewer"
169+
<!-- Do not use scroll function of MarkdownViewer because it does not support smooth scroll -->
170+
<ScrollViewer
171+
x:Name="MarkdownScrollViewer"
171172
Grid.Row="2"
172173
Grid.Column="0"
173174
Grid.ColumnSpan="5"
174175
Width="500"
175-
Height="500"
176-
Margin="15 0 20 0"
177-
ClickAction="SafetyDisplayWithRelativePath"
178-
Loaded="MarkdownViewer_Loaded"
179-
Plugins="{StaticResource MdXamlPlugins}"
180-
Visibility="Collapsed" />
176+
Height="500">
177+
<mdxam:MarkdownScrollViewer
178+
x:Name="MarkdownViewer"
179+
Margin="15 0 20 0"
180+
HorizontalAlignment="Stretch"
181+
VerticalAlignment="Stretch"
182+
ClickAction="SafetyDisplayWithRelativePath"
183+
HorizontalScrollBarVisibility="Disabled"
184+
Loaded="MarkdownViewer_Loaded"
185+
MouseWheel="MarkdownViewer_MouseWheel"
186+
Plugins="{StaticResource MdXamlPlugins}"
187+
PreviewMouseWheel="MarkdownViewer_PreviewMouseWheel"
188+
VerticalScrollBarVisibility="Disabled"
189+
Visibility="Collapsed" />
190+
</ScrollViewer>
181191

182192
<!-- This Grid is for display progress ring and refresh button. -->
183193
<!-- And it is also for changing the size of the MarkdownViewer. -->
184-
<!-- Because VerticalAlignment="Stretch" can cause size issue with MarkdownViewer. -->
194+
<!-- Because VerticalAlignment="Stretch" can cause size issue with MarkdownScrollViewer. -->
185195
<Grid
186196
Grid.Row="2"
187197
Grid.Column="0"

Flow.Launcher/ReleaseNotesWindow.xaml.cs

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,25 @@ public ReleaseNotesWindow()
2424
ModernWpf.ThemeManager.Current.ActualApplicationThemeChanged += ThemeManager_ActualApplicationThemeChanged;
2525
}
2626

27+
private void ThemeManager_ActualApplicationThemeChanged(ModernWpf.ThemeManager sender, object args)
28+
{
29+
Application.Current.Dispatcher.Invoke(() =>
30+
{
31+
if (ModernWpf.ThemeManager.Current.ActualApplicationTheme == ModernWpf.ApplicationTheme.Light)
32+
{
33+
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeLight"];
34+
MarkdownViewer.Foreground = Brushes.Black;
35+
MarkdownViewer.Background = Brushes.White;
36+
}
37+
else
38+
{
39+
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeDark"];
40+
MarkdownViewer.Foreground = Brushes.White;
41+
MarkdownViewer.Background = Brushes.Black;
42+
}
43+
});
44+
}
45+
2746
#region Window Events
2847

2948
private void Window_Loaded(object sender, RoutedEventArgs e)
@@ -162,6 +181,8 @@ private sealed class GitHubReleaseInfo
162181

163182
#endregion
164183

184+
#region Control Events
185+
165186
private void MarkdownViewer_Loaded(object sender, RoutedEventArgs e)
166187
{
167188
RefreshMarkdownViewer();
@@ -196,29 +217,36 @@ private async void RefreshMarkdownViewer()
196217
});
197218
}
198219

199-
private void ThemeManager_ActualApplicationThemeChanged(ModernWpf.ThemeManager sender, object args)
220+
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
200221
{
201-
Application.Current.Dispatcher.Invoke(() =>
202-
{
203-
if (ModernWpf.ThemeManager.Current.ActualApplicationTheme == ModernWpf.ApplicationTheme.Light)
204-
{
205-
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeLight"];
206-
MarkdownViewer.Foreground = Brushes.Black;
207-
MarkdownViewer.Background = Brushes.White;
208-
}
209-
else
210-
{
211-
MarkdownViewer.MarkdownStyle = (Style)Application.Current.Resources["DocumentStyleGithubLikeDark"];
212-
MarkdownViewer.Foreground = Brushes.White;
213-
MarkdownViewer.Background = Brushes.Black;
214-
}
215-
});
222+
MarkdownScrollViewer.Height = e.NewSize.Height;
223+
MarkdownScrollViewer.Width = e.NewSize.Width;
216224
}
217225

218-
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
226+
private void MarkdownViewer_MouseWheel(object sender, MouseWheelEventArgs e)
219227
{
220-
MarkdownViewer.Height = e.NewSize.Height;
221-
MarkdownViewer.Width = e.NewSize.Width;
228+
RaiseMouseWheelEvent(sender, e);
222229
}
230+
231+
private void MarkdownViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
232+
{
233+
RaiseMouseWheelEvent(sender, e);
234+
}
235+
236+
private void RaiseMouseWheelEvent(object sender, MouseWheelEventArgs e)
237+
{
238+
e.Handled = true; // Prevent the inner control from handling the event
239+
240+
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
241+
{
242+
RoutedEvent = UIElement.MouseWheelEvent,
243+
Source = sender
244+
};
245+
246+
// Raise the event on the parent ScrollViewer
247+
MarkdownScrollViewer.RaiseEvent(eventArg);
248+
}
249+
250+
#endregion
223251
}
224252
}

0 commit comments

Comments
 (0)