.NET рдФрд░ WPF рдореЗрдВ 10 рдорд┐рдирдЯ рдореЗрдВ рд╕реЗрдореА-рдкреНрд░реАрдЬрд╝реА

рдпрд╣ рдкреНрд░реАрдЬреА рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреА рддрд░рд╣ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕рдорд╛рди рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд╣рд▓реЗ рдорд╛рдирдХ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ PowerPoint 2010 рдореЗрдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рдереАред

рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рдЕрдВрддрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдХреИрдирд╡рд╛рд╕ рдХреА рддрд░рд╣ рдПрдХ рдареЛрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдЪрд▓рддреА рд╣реИ, рдЬрд╝реВрдо рдЗрди рдФрд░ рдЖрдЙрдЯ рд╣реЛрддреА рд╣реИред





рдЗрд╕рд▓рд┐рдП, рд╣рдо .NET рдФрд░ WPF рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдирд┐рдЬреА рддреМрд░ рдкрд░, рдореБрдЭреЗ VB.NET рдкрд╕рдВрдж рд╣реИ (рд╢рд╛рдпрдж {...} рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЬреЛ C # рдореЗрдВ рдПрдХ рдкреВрд░реА рд▓рд╛рдЗрди рдХреЛ рд▓реЗрддреА рд╣реИ)ред

рдЖрд╡рд╢реНрдпрдХ: VisualStudio, рдлреНрд░реЗрдорд╡рд░реНрдХ 4 рдФрд░ рдПрдХ рд╕реНрд╡рд╕реНрде рддрд╕реНрд╡реАрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 4800x3800, рдлрд╝реЛрдЯреЛрд╢реЙрдк рдореЗрдВ рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪреА рдЧрдИ (рдЖрдк PowerPoint рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рд╛рде рд╕реНрд▓рд╛рдЗрдб рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЪрд┐рдкрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ):

рдЫрд╡рд┐

VisualStudio рдореЗрдВ рд╣рдо рдПрдХ рдЦрд╛рд▓реА WPF рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ "рдлрд╝реЙрд░реНрдо" рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
рдПрдХ рдЖрдХреГрддрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде ImageBg рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐, рдЫрд┐рдкреА рд╕рд▓рд╛рдЦреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдШрдЯрдХ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдФрд░ Image1 рдЫрд╡рд┐ред

<Grid Name="Grid1"> <Image Name="ImageBg" Stretch="Fill"/> <ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"> <Image Name="Image1" Stretch="None"/> </ScrollViewer> </Grid> 


рд╣рдо рдЪрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:

  '    Dim base_dir As String = System.AppDomain.CurrentDomain.BaseDirectory() '  Dim trTranslate As New TranslateTransform '  Dim trRotate As New RotateTransform '  Dim trScale As New ScaleTransform ' (- ) Dim stp As Integer = 0 '-  Dim stp_count As Integer = 0 '     Dim ease As New PowerEase '   (, , ) Dim init_s, init_a As Double Dim init_x, init_y As Integer '   (, ,    ) Dim new_z(99) As Double Dim new_a(99) As Double Dim new_x(99) As Double Dim new_y(99) As Double Dim new_t(99) As Double 


рд╣рдо Window_Loaded рдореЗрдВ рдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

ImageBg.Source = New BitmapImage(New Uri(base_dir + "bg.jpg"))
Image1.Source = New BitmapImage(New Uri(base_dir + "content.jpg"))


рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд▓реЗ) рдФрд░ content.jpg рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ bg.jpg рдХреЛ рдбрд┐рдмрдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдПрдХ .png рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА рдорд╛рд╕реНрдХ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╢рд╛рдирджрд╛рд░ рд╣реИред

рд╡рд╣рд╛рдВ, рдЫрд╡рд┐ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

Dim transf_grp As New TransformGroup
transf_grp.Children.Add(trTranslate)
transf_grp.Children.Add(trRotate)
transf_grp.Children.Add(trScale)
Image1.RenderTransform = transf_grp


рдпрд╛рдиреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рд╣рдо рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рдЬрд╛рдП (рдорд╛рдирд╡реАрдп рд░реВрдк рд╕реЗ рдпрд╣ рд╕реНрдЯреНрд░реЗрдЪ рдФрд░ рдорд╛рд░реНрдЬрд┐рди рдЧреБрдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ):


init_s = Math.Round(Grid1.ActualWidth / (Image1.Source.Width + 50), 2)
init_a = 0
init_x = 50
init_y = (Grid1.ActualHeight - (Image1.Source.Height) * init_s) * 2
trScale.ScaleX = init_s
trScale.ScaleY = init_s
trRotate.Angle = init_a
trTranslate.X = init_x
trTranslate.Y = init_y


рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЪрд░рдг рд╕реВрдЪреА рд▓реЛрдб рдХрд░рдирд╛:

If File.Exists(base_dir + "loc.ini") Then
Dim oRead As System.IO.StreamReader = File.OpenText(base_dir + "loc.ini")
Dim data(99) As String
Dim i As Integer = 0
Do While oRead.Peek >= 0
i += 1
data(i) = oRead.ReadLine()
Dim param() As String = data(i).Split(",")
new_z(i) = CDbl(param(0))
new_a(i) = CDbl(param(1))
new_x(i) = CDbl(param(2))
new_y(i) = CDbl(param(3))
new_t(i) = CDbl(param(4))
If new_z(i) <> 0 Then stp_count += 1
Loop
oRead.Close()
End If


рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛: рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдирдпрд╛ рдЪрд░рдг рд╣реИ, рдФрд░ рд▓рд╛рдЗрди рдореЗрдВ 5 рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдЬреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо (рд╕реНрдХреЗрд▓, рдХреЛрдг, x рдФрд░ y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдЧрддрд┐рдорд╛рди рд╕рдордп) рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВ

рдЪрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ:

Private Sub NavigationStep()
Dim Z_anim As New DoubleAnimation(trScale.ScaleX, new_z(stp), TimeSpan.FromSeconds(new_t(stp)))
Dim A_anim As New DoubleAnimation(trRotate.Angle, new_a(stp), TimeSpan.FromSeconds(new_t(stp) / 2))
Dim X_anim As New DoubleAnimation(trTranslate.X, new_x(stp), TimeSpan.FromSeconds(new_t(stp)))
Dim Y_anim As New DoubleAnimation(trTranslate.Y, new_y(stp), TimeSpan.FromSeconds(new_t(stp)))
ease.EasingMode = EasingMode.EaseInOut
Z_anim.EasingFunction = ease
A_anim.EasingFunction = ease
X_anim.EasingFunction = ease
Y_anim.EasingFunction = ease
trScale.BeginAnimation(ScaleTransform.ScaleXProperty, Z_anim)
trScale.BeginAnimation(ScaleTransform.ScaleYProperty, Z_anim)
trRotate.BeginAnimation(RotateTransform.AngleProperty, A_anim)
trTranslate.BeginAnimation(TranslateTransform.XProperty, X_anim)
trTranslate.BeginAnimation(TranslateTransform.YProperty, Y_anim)
End Sub


рдкреИрдорд╛рдиреЗ, рдХреЛрдг рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл 4 рдПрдирд┐рдореЗрд╢рди рд╣реИрдВ (рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдб рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЪрд░ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд▓рдЧрднрдЧ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ)ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╣реИред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ loc.ini рдореЗрдВ рдХрдИ рдЪрд░рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
1.5,0,-70,-40,1.5
2,-100,-1200,-100,2
3,85,110,-640,1
4,35,-735,-1800,0.5

рдФрд░ рдХреЛрдб рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ:

Private Sub Image1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Image1.MouseUp
If Not setup_mode And Not sel_mode Then
If e.GetPosition(Grid1).X < Grid1.ActualWidth / 2 Then
stp -= 1
If stp <= 0 Then stp = stp_count
NavigationStep()
End If
If e.GetPosition(Grid1).X >= Grid1.ActualWidth / 2 Then
stp += 1
If stp = stp_count + 1 Then stp = 1
NavigationStep()
End If
End If
End Sub


рдпрджрд┐ рдЖрдкрдиреЗ рд╕рд╛рдордЧреНрд░реА рдЫрд╡рд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реИ - рдПрдХ рдХрджрдо рдкреАрдЫреЗ, рджрд╛рдИрдВ рдУрд░ - рдЖрдЧреЗред

рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдирдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рдж рдХреА рдмрдЪрдд рдХреЗ рд╕рд╛рде рдПрдХ рдЯреНрдпреВрдирд┐рдВрдЧ рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ 4 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдк рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╡реЗрдХреНрдЯрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдкреНрд░реАрдЬреА рдХреЗ рдХрд░реАрдм рдЖрдПрдЧрд╛), рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдЪрд╛рдПрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреА-рдЯрдЪ рдЬреЛрдбрд╝реЗрдВ, рддреНрд╡рд░рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди, рдХреИрдирд╡рд╛рд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред

Source: https://habr.com/ru/post/In138593/


All Articles