初学WPF遇到一些问题,请各位高手帮忙.
我在Canvas中放了两个矩形一大一小。大矩形的透明度为0.5,小矩形为不透明。现在将大的矩形覆盖到小矩形上面,然后如何选中小矩形呢。
我在Canvas中放了两个矩形一大一小。大矩形的透明度为0.5,小矩形为不透明。现在将大的矩形覆盖到小矩形上面,然后如何选中小矩形呢。
解决方案 »
- 怎么取道datalist的页脚的子控件的值?
- 多个客户端同时发送请求同一个webservic执行 增删改数据库。
- 如果使用xmltextreader 和xmltextwriter 修改XML 子节点?
- 请高手相助!!!自定义控件定义了Value属性用于绑定数据栏位,但在加载数据时总是会触发Table.ColumnChanged事件
- C#中怎样将文本文件导入到数据库的问题?
- 支付宝在线支付问题,不知如何更新自己数据库
- 请教“实体类一个反序列化的方法”怎么写成一个通用的方法,将实体类传过来
- DropDownList联动过滤girdview如何实现??
- C#窗体互动问题,两个窗体,如何点击按钮,把一个窗体里面定义的结构体数组显示到另一个窗体的listview里面?
- 中国队1:1逼平马来西亚队!
- 水晶报表绑定数据集
- 【存储过程要传递的参数值过长 怎么办】
getPosition,
假如大小矩形都满足条件,则2个选一个咯
1. 但你在上面(ZIndex大)的那个Rectangle中点下鼠标,会触发wpf做一系列的hittest,找出满足条件的元素,可以肯定的是,只有一个,这个元素就是source
2. 从source沿visual tree一路往上达到顶层,然后触发隧道事件,即previewmousedown,首先触发root node,一般是你的window,从window,往上达到canvas,最后到达Rectangle(ZIndex大的那个)
3. 然后再从source,往上进行bubble,即冒泡事件,mousedown,从Rectangle到Canvas,最后到Window
4. 一旦中间e.handle=true,事件流中止
5. 所以在这个流程中另外一个Rectangle根本没有参与,这就是无法收到的原因
6. 在这个基础上,如果你需要让另外的Rectanglek可以收到事件通常2个思路
a. 让第一个ishittestvisible=false,不参与hittest流程,那么后一个就会被选中,不过这个可能不适用你的情况
b. 在隧道流到达Canvas时,让Canvas截获,然后遍历其Children,让每个Child做HitTest,人为改变事件流程那么就可以达到你要的效果。