Мне нужно только показать пользовательский элемент управления (часы с вращающимися стрелками) и этим заменить курсор мыши, если я использую файл .cur или .ani для замены курсора мыши
Me.CUrsor = New Cursor («абсолютный путь к файлу .ani»)
нет проблем: я могу изменить курсор во время процедуры: но качество анимации очень плохое, а также, по другим причинам, я бы предпочел использовать мой маленький пользовательский элемент управления. Проблема в том, что если я напишу:
Me.gridScreen.Visibility = Visibility.Visible
'некоторые операции, которые занимают около 1 секунды
Me.gridScreen.Visibility = Visibility.Hidden
(gridScreen - это сетка, содержащая пользовательский элемент управления)
Очевидно, я ничего не вижу, потому что обновление пользовательского интерфейса происходит в конце процедуры. Я пробовал Me.UpdateLayout (), но он не работает.
Я пытался использовать диспетчер разными способами, но ни один из них не работает: - (
Это моя потерянная попытка:
(uCurClock - это пользовательский контроль, gridScreen a Grid, расположенный на верхнем уровне в окне, с прозрачным фоном, который содержит пользовательский контроль)
Private Sub showClock()G
Dim thread = New System.Threading.Thread(AddressOf showClockIntermediate)
thread.Start()
End Sub
Private Sub hideClock()
Dim thread = New System.Threading.Thread(AddressOf hideClockIntermediate)
thread.Start()
End Sub
Private Sub showClockIntermediate()
Me.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New Action(AddressOf showClockFinale))
End Sub
Private Sub hideClockIntermediate()
Me.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New Action(AddressOf hideClockFinale))
End Sub
Private Sub showClockFinale()
Dim pt As Point = Mouse.GetPosition(Nothing)
Me.uCurClock.Margin = New Thickness(pt.X - 9, pt.Y - 9, 0, 0)
Me.gridScreen.Visibility = Visibility.Visible
Me.Cursor = Cursors.None
Me.UpdateLayout()
End Sub
Private Sub hideClockFinale()
Me.gridScreen.Visibility = Visibility.Hidden
Me.Cursor = Cursors.Arrow
Me.UpdateLayout()
End Sub
Private Sub u_MouseMove(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles gridScreen.MouseMove
Dim pt As Point = e.GetPosition(Nothing)
Me.uCurClock.Margin = New Thickness(pt.X - 9, pt.Y - 9, 0, 0)
e.Handled = True
End Sub
Private Sub u_MouseEnter(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles gridScreen.MouseEnter
Me.uCurClock.Visibility = Visibility.Visible
e.Handled = True
End Sub
Private Sub u_MouseLeave(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles gridScreen.MouseLeave
Me.uCurClock.Visibility = Visibility.Hidden
e.Handled = True
End Sub
PIleggi