none
实现自定义光标形状后,光标拖动比较缓慢,光标形状和移动点有明显的延迟 RRS feed

  • 问题

  • 自定义光标类参考 http://customcursor.codeplex.com/

    ----------------------------------------------------------------

    点击后改变光标样式

    DataTemplate crossCursorDataTemplate = Application.Current.Resources["CrossCursor"] as DataTemplate;
    pdfScroll.SetValue(CustomCursor.CursorTemplateProperty, crossCursorDataTemplate);

    改变后,光标拖动比较缓慢,光标形状和移动点有明显的延迟,能不能让它移动快点呢?

    ----------------------------------------------------------------

    光标样式

    string penCursor = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">" +
                                "<Grid>" +
                                    "<Ellipse Fill=\"" + cursorColor + "\" Width=\"" + cursorWidth + "\" Height=\"" + cursorWidth + "\">" +
                                        "<Ellipse.RenderTransform>" +
                                            "<TranslateTransform X=\"-10\" Y=\"-10\" />" +
                                        "</Ellipse.RenderTransform>" +
                                    "</Ellipse>" +
                                    "<Path Width=\"20\" Height=\"20\" " +
                                            "Data=\"M0,5 L 3,5 M 7,5 L 10,5 M 5,0 L 5,3 M 5,7 L 5,10 M 4.8,5 L 5.2,5\" " +
                                            "Stroke=\"Black\" " +
                                            "StrokeThickness=\"1\" " +
                                            "Stretch=\"Fill\">" +
                                        "<Path.RenderTransform>" +
                                            "<TranslateTransform X=\"-10\" Y=\"-10\" />" +
                                        "</Path.RenderTransform>" +
                                    "</Path>" +
                                "</Grid>" +
                            "</DataTemplate>";


    2013年4月10日 15:23

答案

全部回复

  • 你看了Custom Cursor的代码后,你会发现,它是通过实现一系列的PointerEntered,PointerMoved等事件,然后再事件中通过你给定的样式来绘制图形以替代系统默认的光标。而光标本身是一个Popup而已。整个光标的移动,是通过这个 Popup 的TranslateTransform来实现的。

            private void UpdateCursor(HoldingRoutedEventArgs e)
            {
                _cursorContainer.IsOpen = true;
                var p = e.GetPosition(null);
                var t = (_cursorContainer.Child.RenderTransform as TranslateTransform);
                t.X = p.X;
                t.Y = p.Y;
            }

    这里是他的代码 http://customcursor.codeplex.com/SourceControl/changeset/view/17444#395145

    我个人想法,要去提高这个运动的性能,几个方面可以入手:

    1. 简化你的模板,索性用一个透明背景的png图片喜欢你的图形
    2. 他原先的代码是直接设置相对位置给到Popup, 你可以换用相对位移量,每次移动的微小位移量来改变现在的 Popup的TranslateTransform X, Y值。



    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2013年4月11日 5:45
    版主
  • 谢谢版主

    我要实现的光标效果是类似Windows画图功能里面的光标,是动态改变的,能根据线条的颜色和粗细变换光标,

    画图里的光标也会有点延迟,但是延迟的不是很多,基本是比较快的,我自己实现的就很慢了

    2013年4月11日 8:15
  • http://winrtxamltoolkit.codeplex.com/  这个Toolkip中有个扩展,ControlExtensions.Cursor 这个比你那个性能好

    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2013年4月11日 9:10
    版主