View Full Version : سوال: گذاشتن افکت برای user control با الگوی mvvm
سیدسبحان
پنج شنبه 26 آذر 1394, 18:59 عصر
سلام وقت بخیر
راستش من میخام با الگوی mvvm یه نرم افزار بسازم
کنترلهای مربوط به جست و جو کردن رو به عنوان یک usercontrol طراحی کردم.
میخام مثل منوی سمت چپ ویندوز 8 ، بیاد روی فرم و بره.
یعنی وقتی روی دکمه جستوجو کلیک میشه، این یوزر کنترل بیاد روی فرم، و با دکمه ای که روی خود یوزرکنترل گذاشتم، بره.
امیدوارم متوجه شده باشید.
حالا من نمیدونم اولا :
چطوری افکت رو بدم .
دوم اینکه برگردونمش.
همه اینا با mvvm
تشکر
alireza264
پنج شنبه 26 آذر 1394, 23:15 عصر
از invoke باید استفاده کنی
سیدسبحان
جمعه 27 آذر 1394, 08:30 صبح
از invoke باید استفاده کنی
ممنون
ولی میشه یه راهنمایی بکنید؟!
یه منبع!
یه توضیح !
یه مثال!
من با invoke آشنایی ندارم متاسفانه
AbbasSediqi
شنبه 29 اسفند 1394, 08:41 صبح
Imports System.DrawingImports System.IO
Imports System.Runtime.InteropServices
Imports System.Windows
Imports System.Windows.Interop
Imports System.Windows.Media.Imaging
Imports System.Windows.Threading
Public Class AnimatedGIFControl
Inherits System.Windows.Controls.Image
Private _bitmap As Bitmap
' Local bitmap member to cache image resource
Private _bitmapSource As BitmapSource
Public Delegate Sub FrameUpdatedEventHandler()
''' <summary>
''' Delete local bitmap resource
''' Reference: http://msdn.microsoft.com/en-us/library/dd183539(VS.85).aspx
''' </summary>
<DllImport("gdi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean
End Function
''' <summary>
''' Override the OnInitialized method
''' </summary>
Protected Overrides Sub OnInitialized(ByVal e As EventArgs)
MyBase.OnInitialized(e)
End Sub
''' <summary>
''' Load the embedded image for the Image.Source
''' </summary>
Private Sub AnimatedGIFControl_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded
_bitmap = New Bitmap(Microsoft.VisualBasic.Right(Source.ToString , Len(Source.ToString) - 8))
_bitmapSource = Source
End Sub
''' <summary>
''' Close the FileStream to unlock the GIF file
''' </summary>
Private Sub AnimatedGIFControl_Unloaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Unloaded
StopAnimate()
End Sub
''' <summary>
''' Start animation
''' </summary>
Public Sub StartAnimate()
ImageAnimator.Animate(_bitmap, AddressOf OnFrameChanged)
End Sub
''' <summary>
''' Stop animation
''' </summary>
Public Sub StopAnimate()
ImageAnimator.StopAnimate(_bitmap, AddressOf OnFrameChanged)
End Sub
''' <summary>
''' Event handler for the frame changed
''' </summary>
Private Sub OnFrameChanged(ByVal sender As Object, ByVal e As EventArgs)
Dispatcher.BeginInvoke(DispatcherPriority.Normal, New FrameUpdatedEventHandler(AddressOf FrameUpdatedCallback))
End Sub
Private Sub FrameUpdatedCallback()
ImageAnimator.UpdateFrames()
If _bitmapSource IsNot Nothing Then
_bitmapSource.Freeze()
End If
' Convert the bitmap to BitmapSource that can be display in WPF Visual Tree
_bitmapSource = GetBitmapSource()
Source = _bitmapSource
InvalidateVisual()
End Sub
Private Function GetBitmapSource() As BitmapSource
Dim handle As IntPtr = IntPtr.Zero
Try
handle = _bitmap.GetHbitmap()
_bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions())
Finally
If handle <> IntPtr.Zero Then
DeleteObject(handle)
End If
End Try
Return _bitmapSource
End Function
End Class
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.