ฉันต้องการสร้างเอฟเฟกต์สไลด์หน้าบน WPF, Frame control ไปเลย.
ก่อนอื่นฉันใส่กรอบและปุ่ม 2 ปุ่มสำหรับการนำทาง:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="25"/>
</Grid.ColumnDefinitions>
<Frame x:Name="frame" Source="page1.xaml" Grid.Column="1" />
<Button Grid.Column="0" Content="<" Click="GoPrevious"/>
<Button Grid.Column="2" Content=">" Click="GoNext"/>
</Grid>
จากนั้น ฉันสร้างเพจ 3 หน้าด้วยสีที่ต่างกัน: Page1.xaml, Page2.xaml และ Page3.xaml
ตอนนี้เมื่อคลิกปุ่มนำทาง ระบบจะนำทางไปยัง uri:
frame.Navigate(new Uri("page2.xaml", UriKind.Relative));
เสร็จแล้ว. ตอนนี้ฉันต้องการให้แต่ละหน้าสไลด์เมื่อนำทาง (ใครๆ ก็ต้องการ) ดังนั้นแผนของฉันคือตั้งค่า Loaded EventTrigger ของทุกหน้า:
<Page.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:0.75" Storyboard.TargetProperty="Margin" From="500,0,-500,0" To="0" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="FrameworkElement.Unloaded">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:0.75" Storyboard.TargetProperty="Margin" From="0" To="-500,0,500,0" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Page.Triggers>
และมันก็ได้ผล! ทุกอย่างเป็นไปด้วยดีจนกระทั่งฉันพบว่าหน้าต่างๆ ไม่ต่อเนื่องกัน หมายความว่าเมื่อคุณไปที่หน้าที่ 2 หน้าที่ 1 จะยกเลิกการโหลดทันที แทนที่จะเริ่มเหตุการณ์ที่โหลดหน้าที่ 2 ฉันพยายามตั้งค่าเหตุการณ์ยกเลิกการโหลดของ page1 แต่ไม่ได้ผล
สิ่งที่อยากได้คือเมื่อเพจ1เริ่มออก หน้า2ก็ควรจะขึ้นเวทีทันทีเหมือนรถไฟทีละคน
แล้วจะทำยังไงล่ะ? ขอบคุณ.