Storyboard 또는 준비 완료/이미 완료된 WPF를 사용하지 않아도 예쁜 효과를 얻으려고합니다.DispatcherTimer를 사용하여 C#에서 수동으로 WPF에서 매끄러운 효과 만들기
나는 부드러운 효과를 내기를 원한다. UI 요소가 2-3 초 동안 크기가 바뀌고 색상이 바뀌는 것과 같은 어떤 이벤트에서. 내가 부드럽고 예쁜 방식으로 만들고 싶은이 모든 것들.
내 효과의 각 프레임을 렌더링하는 등의 클래스가 준비되어 있습니다 : 여기
public static class ApplicationHelper
{
[SecurityPermissionAttribute(SecurityAction.Demand,
Flags=SecurityPermissionFlag.UnmanagedCode)]
public static void DoEvents(DispatcherPriority priority)
{
DispatcherFrame frame = new DispatcherFrame();
DispatcherOperation oper = Dispatcher.CurrentDispatcher.
BeginInvoke(priority,
new DispatcherOperationCallback(ExitFrameOperation),
frame);
Dispatcher.PushFrame(frame);
if (oper.Status != DispatcherOperationStatus.Completed)
{
oper.Abort();
}
}
private static object ExitFrameOperation(object obj)
{
((DispatcherFrame)obj).Continue = false;
return null;
}
[SecurityPermissionAttribute(SecurityAction.Demand,
Flags=SecurityPermissionFlag.UnmanagedCode)]
public static void DoEvents()
{
DoEvents(DispatcherPriority.Background);
}
}
나는 그것이 DispatcherTimer 작업을 만들려고 노력 해요 :
void vb1_click(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
DispatcherTimer dt = new DispatcherTimer();
dt.Interval = new TimeSpan(0, 0, 0, 0, 500);
dt.Tick += new System.EventHandler(dt_Tick);
dt.Start();
}
void dt_Tick(object sender, System.EventArgs e)
{
for(int i = 0; i < 20; i++)
{
this.vb2_blur_eff.Radius = (double)i;
ApplicationHelper.DoEvents();
}
}
주요 문제가 있음을 나는 그것을 기다리고있어, 마지막 시간 (마지막 프레임이 렌더링되어야 할 때)에, 나는 모든 프레임을 매우 빠른 속도로 처리 할 것이지만, 실제로는 아무것도 없다.
어떻게 해결하고 완료/완료 한 물건을 사용하지 않고 순수한 C# 방식으로 완벽한 부드러운 효과를 만드시겠습니까?
감사합니다.
왜 바퀴를 다시 만들겠습니까? – punker76
@ punker76 – Secret
을 구현하고 있지만 왜 시각적 상태 정보를 시각적 상태 정보 관리자와 함께 사용하지 않는 것이 좋을까요? – punker76