salve a tutti,
Sto creando un'applicazione che incapsula un controllo wpf (tastiera su schermo) il mio problema è che con il dispatcher riesco a nascondere il controllo dopo 10 secondi per riattivare il controllo volevo utilizzare il movimento del mouse ma nel momento in cui muovo il mouse all'interno del form attivo il controllo si riapre ma in un numero infinito di volte di seguito il codice del controllo xaml.cs
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Threading;
using System.Windows.Threading;
using System.Windows.Interop;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Markup;
using System.Diagnostics;
using System.Reflection;
namespace BensOSK
{
/// <summary>
/// Interaction logic for BensOnScreenKeyboardWindow.xaml
/// </summary>
public partial class BensOnScreenKeyboardWindow : Window
{
private EventHandler handler;
/// <summary>
/// Create a new BensOnScreenKeyboardWindow
/// </summary>
public BensOnScreenKeyboardWindow()
{
InitializeComponent();
// add keyboard
this.keyGrid.Children.Add(new BensOnScreenKeyboard(this));
handler = delegate
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(10);
timer.Tick += delegate
{
if (timer != null)
{
timer.Stop();
timer = null;
System.Windows.Interop.ComponentDispatcher.ThreadIdle -= handler;
this.Hide();
System.Windows.Interop.ComponentDispatcher.ThreadIdle += handler;
}
};
timer.Start();
Dispatcher.CurrentDispatcher.Hooks.OperationPosted += delegate
{
if (timer != null)
timer.Stop();
timer = null;
};
};
ComponentDispatcher.ThreadIdle += handler;
}
/// <summary>
/// Create a new BensOnScreenKeyboardWindow
/// </summary>
/// <param name="focusableElement">Specifies element to hold keyboards focus</param>
public BensOnScreenKeyboardWindow(IInputElement focusableElement)
{
InitializeComponent();
// add keyboard
this.keyGrid.Children.Add(new BensOnScreenKeyboard(focusableElement));
}
/// <summary>
/// Setup this window
/// </summary>
private void setupKeyboardWindow()
{
// set top
this.Top = SystemParameters.PrimaryScreenHeight - this.Height;
// set left
this.Left = 150;
// set width
this.Width = SystemParameters.PrimaryScreenWidth;
}
/// <summary>
/// Set the apps skin
/// </summary>
/// <param name="skinName"></param>
private void setSkin(String skinName)
{
// create uri to skin
Uri skinUri = new Uri(String.Format("/Skins/{0}.xaml", skinName), UriKind.Relative);
// tell app to load skins
App app = System.Windows.Application.Current as App;
// load skins
app.ApplySkin(skinUri);
}
private void Window_Initialized(object sender, EventArgs e)
{
// setup
this.setupKeyboardWindow();
}
private void normalButton_Click(object sender, RoutedEventArgs e)
{ // set skin
this.setSkin(normalButton.CommandParameter.ToString());
}
private void blackButton_Click(object sender, RoutedEventArgs e)
{
// set skin
this.setSkin(blackButton.CommandParameter.ToString());
}
private void blueButton_Click(object sender, RoutedEventArgs e)
{
// set skin
this.setSkin(blueButton.CommandParameter.ToString());
}
}
}