如何在视图模型中进行命中测试?

艾伦·韦恩

我似乎无法在Google上找到它。在使用MVVM的WPF中,我有一个用于视图的InkCanvas。在此InkCanvas下,还有多个提供不同文本信息的画布。

将InkCanvas与PreviewMouseDown绑定到视图模型,为viewmodel提供了MouseButtonEventArgs,我相信可以从中获得鼠标位置(相对于什么?)

但是,当viewmodel没有对视图的引用时,从下部画布中获取文本元素的最佳方法是什么?如何在视图模型中进行命中测试???

ViewModel:

private RelayCommand inkCanvas_PreviewMouseDown;
    public RelayCommand InkCanvas_PreviewMouseDown
    {
        get
        {

            if (inkCanvas_PreviewMouseDown == null)
            {                   
              inkCanvas_PreviewMouseDown = new RelayCommand( (p) => { this.method(p); 
                });
            }
            return inkCanvas_PreviewMouseDown;
        }
    }

    private void method(Object e)
    {
        MouseButtonEventArgs args = e as MouseButtonEventArgs;
        Point pt = args.GetPosition(null);

      ??? How to find the elements  below the point on the other layers?
      HitTestResult hit = VisualTreeHelper.HitTest(args.Source, pt);  <--This is wrong.
    }

XAML

  <ink:CustomInkCanvas x:Name="inkcanvas" Panel.ZIndex="4" 
                        Width="{x:Static h:Constants.widthCanvas}"
                        Height ="{x:Static h:Constants.heightCanvas}"          
                        Background="Transparent" 
                        DefaultDrawingAttributes="{Binding DDA}" 
                        EditingMode="{Binding EditingMode}" 
                        Strokes="{Binding Strokes}"
                        h:MouseBehaviour.PreviewMouseDownCommand="{Binding InkCanvas_PreviewMouseDown}"                                   
                        >
 </ink:CustomInkCanvas>
艾伦·韦恩

由于我还没有参与者,因此我将解释自己最终希望做些什么,以帮助其他人。

据我所知,HitTesting需要视图中的视觉效果。所以这个问题的意图没有道理-我的新手错误。最终,可以将命中测试的代码放入视图模型中,但是在某些时候,还必须将开始的视觉效果添加到视图模型中。

对我来说最简单的方法是:

在代码隐藏中:

  inkcanvas.PreviewMouseLeftButtonDown += vm.OnPreviewLeftMouseDown;

在视图模型中:

 public void OnPreviewLeftMouseDown (object sender, MouseButtonEventArgs e)
    { 
        // get visual parent to the inkcanvas. this parent contains all the canvases.
         DependencyObject visualparent = VisualTreeHelper.GetParent((DependencyObject)sender);

         GetVisualHeap( e.GetPosition((UIElement)sender), VisualTreeHelper.GetParent((DependencyObject)sender));
    }

其中vm是视图模型,而GetVisualHeap是我实际进行命中测试的方法(并且在SO上对此有很好的记录)。

希望这对某人有帮助。我肯定会对更好的解决方案感兴趣。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在核心图形中进行命中检测

来自分类Dev

如何在模型中进行迭代,然后在视图中再次进行迭代?

来自分类Dev

当需要数组时,我应该如何在视图模型(淘汰js)中进行计算?

来自分类Dev

如何在Clojure中进行集成测试?

来自分类Dev

如何在测试中进行断言的 OR

来自分类Dev

如何在Flask Admin中的“多对多”关系中的模型视图中进行自定义查询?

来自分类Dev

如何在Flask Admin中的“多对多”关系中的“模型视图”中进行自定义查询?

来自分类Dev

如何在秘银中对具有视图模型依赖性的视图进行单元测试?

来自分类Dev

如何在模型中进行长度验证的if else语句

来自分类Dev

如何在Django模型中进行“分组依据”?

来自分类Dev

如何在Django模型中进行“分组依据”?

来自分类Dev

如何在Ruby on Rails模型中进行条件验证?

来自分类Dev

如何在R中进行边际模型分析?

来自分类Dev

Rails:如何在不同的视图中进行小的更改

来自分类Dev

如何在MVC Razor视图中进行AJAX调用?

来自分类Dev

如何在SwiftUI视图中进行导航控制

来自分类Dev

Rails:如何在不同的视图中进行小的更改

来自分类常见问题

如何在春季启动中进行Junit测试

来自分类Dev

我如何在python中进行F测试

来自分类Dev

如何在openresty中进行单元测试?

来自分类Dev

如何在Laravel中进行测试前设置cookie?

来自分类Dev

如何在ocaml中进行测试驱动的开发?

来自分类Dev

我如何在Dart中的then语句中进行测试

来自分类Dev

如何在开玩笑的例外中进行测试

来自分类Dev

如何在春季启动中进行Junit测试

来自分类Dev

如何在React Native中进行笑话测试?

来自分类Dev

如何在React和Node中进行测试?

来自分类Dev

如何在R中进行lm()输出测试

来自分类Dev

如何在摩卡咖啡中进行硒测试?

Related 相关文章

  1. 1

    如何在核心图形中进行命中检测

  2. 2

    如何在模型中进行迭代,然后在视图中再次进行迭代?

  3. 3

    当需要数组时,我应该如何在视图模型(淘汰js)中进行计算?

  4. 4

    如何在Clojure中进行集成测试?

  5. 5

    如何在测试中进行断言的 OR

  6. 6

    如何在Flask Admin中的“多对多”关系中的模型视图中进行自定义查询?

  7. 7

    如何在Flask Admin中的“多对多”关系中的“模型视图”中进行自定义查询?

  8. 8

    如何在秘银中对具有视图模型依赖性的视图进行单元测试?

  9. 9

    如何在模型中进行长度验证的if else语句

  10. 10

    如何在Django模型中进行“分组依据”?

  11. 11

    如何在Django模型中进行“分组依据”?

  12. 12

    如何在Ruby on Rails模型中进行条件验证?

  13. 13

    如何在R中进行边际模型分析?

  14. 14

    Rails:如何在不同的视图中进行小的更改

  15. 15

    如何在MVC Razor视图中进行AJAX调用?

  16. 16

    如何在SwiftUI视图中进行导航控制

  17. 17

    Rails:如何在不同的视图中进行小的更改

  18. 18

    如何在春季启动中进行Junit测试

  19. 19

    我如何在python中进行F测试

  20. 20

    如何在openresty中进行单元测试?

  21. 21

    如何在Laravel中进行测试前设置cookie?

  22. 22

    如何在ocaml中进行测试驱动的开发?

  23. 23

    我如何在Dart中的then语句中进行测试

  24. 24

    如何在开玩笑的例外中进行测试

  25. 25

    如何在春季启动中进行Junit测试

  26. 26

    如何在React Native中进行笑话测试?

  27. 27

    如何在React和Node中进行测试?

  28. 28

    如何在R中进行lm()输出测试

  29. 29

    如何在摩卡咖啡中进行硒测试?

热门标签

归档