ورود

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