Kha*_*laf 5 c# wpf mouse mouseover
快速提问:
我在一个Wpf应用程序上,我使用这个例程让鼠标悬停在我的Image上的光标形状改变:
private void mainGrid_MouseEnter(object sender, MouseEventArgs e)
{
mainImage.Cursor = Cursors.Hand;
}
private void mainGrid_MouseLeave(object sender, MouseEventArgs e)
{
mainImage.Cursor = Cursors.Arrow;
}
Run Code Online (Sandbox Code Playgroud)
输出:
我怎样才能获得以下形状?
我希望这可以简单地工作:
foreach (var finger in fingers.Skip(2)) { finger.Extend(); }
Run Code Online (Sandbox Code Playgroud)
但是没有..编程不起作用..
游标中没有我想要的形状:Cursors Class
Vis*_*ent 13
为了获得这样的游标,您需要获取(或创建)自定义游标.Windows中没有这样的游标.可以使用Visual Studio的图标内置图像编辑器来创建自己的光标.
它现在将在所谓的图像图像编辑器中打开您的新光标文件.现在你可以使用铅笔或任何其他不同的绘图工具开始绘图(图像也可以粘贴,但是你看到光标最初有1位颜色格式 - 这意味着只有两种颜色:黑色和白色.这可以通过添加新图像类型进行更改).
现在我们必须为光标指定一个热点.热点是图标中用于跟踪指针实际位置的位置(为简单起见,您可以将其称为光标的点击点).正常的Windows 7 Aero Arrow的热点位于(0,0) - 左上角.
要指定光标的hots pot,我们必须使用Set Hot Spot Tool.然后单击要用作光标图标中热点的特定像素.对于这个光标,我选择了(9,8).
将热点设置为(9,8):
保存所有内容,然后转到Solution Explorer,右键单击您的项目,然后按Properties.然后转到Resources选项卡并单击Add Resource和Add Existing File....
现在找到项目的文件夹,然后选择并打开光标文件.
最后的非代码步骤是选择光标Solution Explorer,转到Properties窗格并设置Build Action为None.这是为了防止它被编译的可执行文件添加两次,因为它已经作为资源添加.
重要提示:请不要对位于光标文件做这个Resources文件夹!
现在进入代码,实际上相当简单.由于您的光标现在被添加为字节数组资源,您只需将其加载到a中MemoryStream,然后将该内存流传递到Cursor类的构造函数中.为了简单和可读性,我将此代码放在另一个类中.
public static class CursorHelper
{
public static Cursor FromByteArray(byte[] array)
{
using (MemoryStream memoryStream = new MemoryStream(array))
{
return new Cursor(memoryStream);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以继续在表单/控件/等级中将您的光标声明为类级别.你会准备好使用它!
private Cursor OpenHand = CursorHelper.FromByteArray(Properties.Resources.CursorOpenHand);
public MainWindow()
{
InitializeComponent();
this.Cursor = OpenHand;
}
Run Code Online (Sandbox Code Playgroud)
我根据你的规格做了一个例子; 一只普通的张开手,当你按住鼠标时它会变成抓手:
private Cursor OpenHand = CursorHelper.FromByteArray(Properties.Resources.CursorOpenHand);
private Cursor GrabbingHand = CursorHelper.FromByteArray(Properties.Resources.CursorGrabbingHand);
public MainWindow()
{
InitializeComponent();
this.Cursor = OpenHand;
this.MouseDown += this.MainWindow_MouseDown;
this.MouseUp += this.MainWindow_MouseUp;
}
private void MainWindow_MouseDown(object sender, MouseEventArgs e)
{
((Control)sender).Cursor = GrabbingHand;
}
private void MainWindow_MouseUp(object sender, MouseEventArgs e)
{
((Control)sender).Cursor = OpenHand;
}
Run Code Online (Sandbox Code Playgroud)
利润!
以下是我使用的游标: