適当にディレイを入れればいけそうですが...
cs
1//一度目の出力
2Debug.WriteLine(ScrollViewerA.HorizontalOffset);
3//ScrollViewerを右方向に次のページへスクロールする
4ScrollViewerA.PageRight();
5
6await Task.Delay(50);
7
8//二度目の出力
9Debug.WriteLine(ScrollViewerA.HorizontalOffset);
あまり美しくもないので、xamlでやったらどうでしょう?(コンバータがいるのがちょっと気になりますが^^;
xml
1<Window
2 x:Class="Qbdagllx4m3peq4.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="clr-namespace:Qbdagllx4m3peq4"
6 Width="200"
7 Height="200">
8 <Window.Resources>
9 <local:MultiValueEqualityConverter x:Key="multiValueEqualityConverter" />
10 <local:LessThanConverter x:Key="lessThanConverter" />
11 </Window.Resources>
12 <DockPanel>
13 <Button
14 Margin="10"
15 Command="ScrollBar.PageRightCommand"
16 CommandTarget="{Binding ElementName=ScrollViewerA}"
17 Content="PageRight"
18 DockPanel.Dock="Bottom">
19 <Button.Style>
20 <Style TargetType="Button">
21 <Style.Triggers>
22 <DataTrigger Value="False">
23 <DataTrigger.Binding>
24 <MultiBinding Converter="{StaticResource multiValueEqualityConverter}">
25 <Binding ElementName="ScrollViewerA" Path="HorizontalOffset" />
26 <Binding ElementName="ScrollViewerA" Path="ScrollableWidth" />
27 </MultiBinding>
28 </DataTrigger.Binding>
29 <Setter Property="Effect">
30 <Setter.Value>
31 <DropShadowEffect BlurRadius="20" ShadowDepth="0" Color="Blue" />
32 </Setter.Value>
33 </Setter>
34 </DataTrigger>
35 </Style.Triggers>
36 </Style>
37 </Button.Style>
38 </Button>
39
40 <!-- こういうのもあり -->
41 <Button
42 Margin="10"
43 Command="ScrollBar.PageRightCommand"
44 CommandTarget="{Binding ElementName=ScrollViewerA}"
45 Content="PageRight"
46 DockPanel.Dock="Bottom">
47 <Button.IsEnabled>
48 <MultiBinding Converter="{StaticResource lessThanConverter}">
49 <Binding ElementName="ScrollViewerA" Path="HorizontalOffset" />
50 <Binding ElementName="ScrollViewerA" Path="ScrollableWidth" />
51 </MultiBinding>
52 </Button.IsEnabled>
53 <Button.Style>
54 <Style TargetType="Button">
55 <Style.Triggers>
56 <Trigger Property="IsEnabled" Value="True">
57 <Setter Property="Effect">
58 <Setter.Value>
59 <DropShadowEffect BlurRadius="20" ShadowDepth="0" Color="Blue" />
60 </Setter.Value>
61 </Setter>
62 </Trigger>
63 </Style.Triggers>
64 </Style>
65 </Button.Style>
66 </Button>
67
68 <ScrollViewer x:Name="ScrollViewerA" HorizontalScrollBarVisibility="Visible">
69 <TextBlock Text="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" />
70 </ScrollViewer>
71 </DockPanel>
72</Window>
cs
1using System.Globalization;
2using System.Windows;
3using System.Windows.Data;
4
5namespace Qbdagllx4m3peq4;
6
7
8public partial class MainWindow : Window
9{
10 public MainWindow() => InitializeComponent();
11}
12
13// [.net - Using binding for the Value property of DataTrigger condition - Stack Overflow](https://stackoverflow.com/questions/2240421/using-binding-for-the-value-property-of-datatrigger-condition)
14public class MultiValueEqualityConverter : IMultiValueConverter
15{
16 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
17 => values?.All(o => o?.Equals(values[0]) == true) == true || values?.All(o => o == null) == true;
18 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
19 => throw new NotImplementedException();
20}
21
22
23public class LessThanConverter : IMultiValueConverter
24{
25 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
26 {
27 var d1 = (double)values[0]; // HorizontalOffset
28 var d2 = (double)values[1]; // ScrollableWidth
29 //スクロール位置が右端に到達していなかったら(まだスクロールできる状態であれば)
30 return d1 < d2;
31 }
32
33 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
34 => throw new NotImplementedException();
35}

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/01/13 14:40
2024/01/14 04:29