He creado un pequeño metodo para reemplazar el cursor de una ventana con un UIElement de WPF:
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
namespace SDKSamples
{
public static class WPFCursor
{
public static void ReplaceCursor(this Window wnd, UIElement cursor)
{
wnd.Cursor = Cursors.None;
Grid cursorHostContainer = wnd.Content as Grid;
if (cursorHostContainer == null) return;
Canvas host = new Canvas();
host.IsHitTestVisible = false;
Canvas.SetZIndex(cursor, int.MaxValue);
cursorHostContainer.Children.Add(host);
host.Children.Add(cursor);
wnd.MouseMove += (s, e) =>
{
var absoluteWindowMousePosition = e.GetPosition(wnd);
Canvas.SetTop(cursor, absoluteWindowMousePosition.Y);
Canvas.SetLeft(cursor, absoluteWindowMousePosition.X);
};
wnd.MouseEnter += (s, e) =>
{
cursor.Visibility = Visibility.Visible;
};
wnd.MouseLeave += (s, e) =>
{
cursor.Visibility = Visibility.Collapsed;
};
}
}
}
Espero les sirva, se usa de la siguiente forma en el constructor de la ventana a la cual le necesitamos reemplazar el cursor, en este ejemplo mi nuevo cursor sera una instancia de un UserControl llamado MySuperCursor.
1: public MainWindow()
2: {
3: InitializeComponent();
4: this.ReplaceCursor(new MySuperCursor());
5: }
Por ultimo, el unico requerimiento que tiene es que la ventana tenga un Grid como elemento contenido principal:
1: <Window x:Class="SDKSamples.Window2"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: Title="Window2" Height="300" Width="300">
5: <Grid>
6: </Grid>
7: </Window>
he aqui un screenshot:
2 comments:
Excelente mi joven padawan, recuerda lo que hablamos vía MSN...
Saludos,
Angel
Estoy en eso :)
Post a Comment