- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对在运行时添加到 Canvas 的一组用户控件进行 HitTest 。
我的 Canvas :
<Canvas x:Name="LayoutRoot" Background="White">
<Canvas x:Name="Carrier" Canvas.ZIndex="-1">
</Canvas>
</Canvas>
我的 Canvas 代码:
public MainPage()
{
InitializeComponent();
var uiElement = new MyUserControl();
this.Carrier.Children.Add(uiElement);
MouseLeftButtonDown += MouseLeftButtonDownHandler;
}
private List<UIElement> HitSprite(Point p)
{
var hitElements =
VisualTreeHelper.FindElementsInHostCoordinates(p, this.Carrier) as List<UIElement>;
return hitElements.Count > 0 ? hitElements : null;
}
private void MouseLeftButtonDownHandler(object sender, MouseButtonEventArgs e)
{
var list = HitSprite(e.GetPosition(this.LayoutRoot));
}
我的用户控件:
<Canvas x:Name="Container" AllowDrop="True">
<StackPanel Name="Description" Height="65" Canvas.ZIndex="2" IsHitTestVisible="False">
<TextBlock Text="Testing" x:Name="Name" FontSize="12" FontWeight="Bold" HorizontalAlignment="Center" IsHitTestVisible="False"/>
<Border Background="Green">
<Image x:Name="Body" Stretch="None" Canvas.ZIndex="0" Height="20" Width="20">
</Image>
</Border>
</StackPanel>
</Canvas>
我为 GetPoint 和 FindElementsInHostCoordinates 尝试了 Carrier 和 LayoutRoot 的各种组合,但返回的元素始终为空。
我做错了什么?
最佳答案
关于 HitTest ,您必须注意以下几点:
在您的情况下,这些因素的组合使您的用户控件对 HitTest 不可见:
我对您的用户控件 XAML 和后面的代码进行了一些修改,现在我在 HitTest 结果中看到了您的用户控件:
public MainPage()
{
// Required to initialize variables
InitializeComponent();
var uiElement = new MyUserControl();
this.Carrier.Children.Add(uiElement);
MouseLeftButtonDown += MouseLeftButtonDownHandler;
}
private List<UIElement> HitSprite(Point p)
{
var hitElements =
VisualTreeHelper.FindElementsInHostCoordinates(p, this.LayoutRoot) as List<UIElement>;
return hitElements.Count > 0 ? hitElements : null;
}
private void MouseLeftButtonDownHandler(object sender, MouseButtonEventArgs e)
{
var list = HitSprite(e.GetPosition(this.LayoutRoot));
}
XAML:
<Grid x:Name="Container" AllowDrop="True" Background="Transparent">
<StackPanel Name="Description" Height="65" Canvas.ZIndex="2" IsHitTestVisible="False">
<TextBlock Text="Testing" x:Name="Name" FontSize="12" FontWeight="Bold" HorizontalAlignment="Center" IsHitTestVisible="False"/>
<Border Background="Green">
<Image x:Name="Body" Stretch="None" Canvas.ZIndex="0" Height="20" Width="20">
</Image>
</Border>
</StackPanel>
</Grid>
作为额外的建议,嵌套 Canvas 面板不是一个好主意,除非有特定的理由这样做。 Canvas 在很多方面都是一个特殊的面板,例如,它不会裁剪超出其边界的项目,默认情况下它没有大小,除非你设置一个,它不是一个实体对象,除非你明确设置背景.尝试使用 Grid 和 StackPanel 来排列对象,并使用 Canvas 仅在 (x,y) 坐标上进行特定定位。
关于wpf - 添加到 Canvas 的 HitTest 子控件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205637/
我有一个包含任意数量锯齿状元素的 WrapPanel。我想为我的项目实现拖动选择。 如何对一个点进行 HitTest 似乎很明显,但我如何才能找到矩形区域内的所有项目? 最佳答案 您可以使用 Visu
我有以下用户控件:一个点及其名称: 这很酷。 现在,我有一个面板,我需要恢复我用鼠标击中的停止点: public partial class
我有一个 UIView,其中包含许多 CALayer 子类。我使用以下代码来检测触摸事件对应于哪一层: - (void)touchesBegan:(NSSet *)touches withEvent:
我有一个透明的 NSView,它画了一个圆圈。我想自定义显示上下文菜单时使用的 HitTest 。 目前它使用边界矩形。我想更改它以测试圆圈内的点击。 最佳答案 尝试覆盖 NSView menuFor
我有一个包含驻留在 Viewport3D 中的 3D 对象的应用程序,我希望用户能够通过在屏幕上拖动一个矩形来选择它们。 我尝试在 Viewport3D 上应用 GeometryHitTestPara
在 RenderTransform 属性中具有较大缩放因子的 Path 元素上,输入命中测试会产生不正确的结果。 以下 XAML 定义了一个带有实心圆和Hand 光标的 Path。
我试图扩展 java ScrollDemo2 来报告 Canvas 上的形状是否被单击。我从一个简单的矩形开始,相信简单地循环 Canvas 中的矩形检查点击点是否包含在其中应该没有问题。但随后发生了
有没有办法在wpf中 HitTest 字符的像素?我希望能够命中字符“i”的点,但是当我单击点和“i”行之间的空格时不会命中。我尝试使用 DrawingContext.DrawText 方法来完成此操
我是 silverlight 的新手,正在尝试阅读使用 HitTest 方法了解鼠标何时位于控件上的 silverlight 教程。但不幸的是,我看不到任何具有此名称的方法。 HitTest 方法在哪
我正在使用 Graphics.DrawString 写出一个字符串,并且需要在给定鼠标位置的字符串中获取字符索引。 这看起来应该很简单,但我真的很难找到一种可行的方法。 我发现 e.Graphics.
我正在使用这种方法来检测是否有人点击了叠加层。现在一切正常,除了点击区域太小。所以我查看了 api,它说“查看给定的命中点是否在项目标记的范围内。”。 我像这样把边界变大了: Log.d("debug
我有一个位图图像,我正在尝试对其进行 HitTest 。如果它只是一个普通位图,则 HitTest 有效。但是我需要旋转和缩放位图,但我似乎无法正确计算出 HitTest 。 这里的x和y是光标x和y
这有点难以解释,所以我举个例子。 mysql表书籍 书籍 firstname |lastname |state |favbook john |doe | WA |bookna
UIViews是否针对UIGestureRecognizers 进行了 HitTest in the same way因为它们用于触摸事件?特别是,是否使用了相同的 hitTest:withEvent
我试图显示过去两天最流行的项目,但这个 View 让两天前发生的项目出现了。 它是为了找到最近两天最流行的(可能是 20-30 个项目)并用随机项目填充剩余的( View 上始终需要 1000 个项目
继上一个问题之后,我试图找出下一个问题是否可行: 假设您有一个渲染图,例如具有透明背景的足球运动员。您将此呈现器添加到您的 html 和 css 中。透明部分现在是图像“盒子”的一部分;你不能点击图片
我自定义了一个列表框来显示饼图(每个列表项都是饼图的一部分)。为此,我使用了一个 Itemtemplate,它(目前)仅包含一个 Shape。为了使这些形状形成一个完整的圆,我计算了每 block 的
我的程序中有一个简单的矩形,我必须对其进行 HitTest 。我正在使用 openFrameworks,但我认为这里的问题也与 OpenGL 主题有关。 public class Shape : pu
在处理草图中实现选择算法时,我循环遍历场景中的每个对象,并检查它是否在鼠标点击位置的几个像素范围内。有很多对象,而且它们非常小。 正如您可以想象的那样,一旦场景中充满了物体,这就会变得非常麻烦。有没有
我想设计一个 PvP 游戏,在客户端和 java 套接字服务器中使用 flash,但我确实需要服务器验证弹道以及子弹是否从作弊中击中目标。 是否有任何教程或论文提供了如何做到这一点? 最佳答案 要做到
我是一名优秀的程序员,十分优秀!