Nuestro grupo especializado pasados muchos días de trabajo y recopilación de de información, hemos dado con la respuesta, nuestro deseo es que todo este artículo sea de utilidad para tu plan.
Solución:
Tienes dos opciones básicas:
-
Cuando el cursor del mouse esté sobre su control, oculte el cursor del sistema configurando
this.Cursor = Cursors.None;
y dibuja tu propio cursor usando cualquier técnica que te guste. Luego, actualice la posición y la apariencia de su cursor respondiendo a los eventos del mouse. Aquí hay dos ejemplos:- http://www.xamlog.com/2006/07/17/creating-a-custom-cursor/
-
http://www.hanselman.com/blog/DeveloperDesigner.aspx
Se pueden encontrar ejemplos adicionales aquí:
-
Tutorial de WPF: cómo usar cursores personalizados
- Configuración del cursor para representar algún texto mientras se arrastra
- Poniéndonos elegantes y usando el Visual que estamos arrastrando para recibir comentarios [instead of a cursor]
- ¿Cómo puedo arrastrar y soltar elementos entre ItemsControls vinculados a datos?
-
Cree un nuevo objeto Cursor cargando una imagen desde un archivo .cur o .ani. Puede crear y editar este tipo de archivos en Visual Studio. También hay algunas utilidades gratuitas flotando para tratar con ellos. Básicamente son imágenes (o imágenes animadas) que especifican un “punto caliente” que indica en qué punto de la imagen se encuentra el cursor.
Si elige cargar desde un archivo, tenga en cuenta que necesita una ruta absoluta del sistema de archivos para usar el Cursor(string fileName)
constructor. cojeando, una ruta relativa o Pack URI no funcionará. Si necesita cargar el cursor desde una ruta relativa o desde un recurso empaquetado con su ensamblaje, deberá obtener una secuencia del archivo y pasarla al Cursor(Stream cursorStream)
constructor. molesto pero true.
Por otro lado, especificar un cursor como una ruta relativa al cargarlo usando un XAML attribute lo hace trabajo, un hecho que podría usar para cargar su cursor en un control oculto y luego copiar la referencia para usar en otro control. No lo he probado, pero debería funcionar.
Como mencionó Peter, si ya tiene un archivo .cur, puede usarlo como un recurso incrustado creando un elemento ficticio en la sección de recursos y luego haciendo referencia al cursor del maniquí cuando lo necesite.
Por ejemplo, supongamos que desea mostrar cursores no estándar según la herramienta seleccionada.
Agregar a los recursos:
Ejemplo de cursor incrustado al que se hace referencia en el código:
if (selectedTool == "Hand")
myCanvas.Cursor = ((TextBlock)this.Resources["CursorGrab"]).Cursor;
else if (selectedTool == "Magnify")
myCanvas.Cursor = ((TextBlock)this.Resources["CursorMagnify"]).Cursor;
else
myCanvas.Cursor = Cursor.Arrow;
-Ben
Hay una manera más fácil que administrar la visualización del cursor usted mismo o usar Visual Studio para construir muchos cursores personalizados.
Si tiene un FrameworkElement, puede construir un Cursor a partir de él usando el siguiente código:
public Cursor ConvertToCursor(FrameworkElement visual, Point hotSpot)
int width = (int)visual.Width;
int height = (int)visual.Height;
// Render to a bitmap
var bitmapSource = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bitmapSource.Render(visual);
// Convert to System.Drawing.Bitmap
var pixels = new int[width*height];
bitmapSource.CopyPixels(pixels, width, 0);
var bitmap = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
for(int y=0; y
Tenga en cuenta que el tamaño de su FrameworkElement debe ser un tamaño de cursor estándar (por ejemplo, 16x16 o 32x32), por ejemplo:
...
Se usaría así:
someControl.Cursor = ConvertToCursor(customCursor, new Point(0.5, 0.5));
Obviamente, su FrameworkElement podría ser un
controle si tiene una imagen existente, o puede dibujar lo que quiera usando las herramientas de dibujo integradas de WPF.
Tenga en cuenta que los detalles sobre el formato de archivo .cur se pueden encontrar en ICO (formato de archivo).
Aquí puedes ver las reseñas y valoraciones de los lectores
Recuerda mostrar este artículo si si solucionó tu problema.