我有一个自定义Shape,PathGeometry作为DefiningGeometry。
PathGeometry显示文本。
我注意到,当您尝试选择画布上的形状时,您必须准确地选择路径的文本边框。
我希望能够击中周围的矩形。
你怎么解决这个问题,我应该添加一个透明的矩形几何吗?
克里希纳代码:
<DataTemplate DataType="{x:Type vm:TextLabel}">
<c:Label Left="{Binding Left}" Top="{Binding Top}" IsDragEnabled="True" DragDeltaCommand="{Binding DragCommand}" Text="{Binding Text}" ToolTip="{Binding Code}" Fill="Black" StrokeThickness="0" x:Name="Label"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
<Setter TargetName="Label" Property="Fill" Value="Red"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>但是c:Label只是一个带有格式化文本的自定义形状。Fill是文本的笔刷。因此字符之间/周围的空格不是形状的一部分。是否可以添加透明矩形以使该矩形参与测试?
发布于 2014-02-24 19:11:39
以下代码起作用:
顶部和左边是自定义DP,用于在画布上给形状一个准确的位置(它们替换了Canvas.Top、Canvas.Left)。
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
var result = base.HitTestCore(hitTestParameters);
if (result == null && hitTestParameters.HitPoint.X < (Left + geometry.Bounds.Width) && hitTestParameters.HitPoint.X > Left)
{
if (hitTestParameters.HitPoint.Y < (Top + geometry.Bounds.Height) && hitTestParameters.HitPoint.Y > Top)
{
result = new PointHitTestResult(this, hitTestParameters.HitPoint);
}
}
return result;
}发布于 2014-02-24 15:36:59
将容器的背景属性设置为透明的,然后它将工作。
例如,如果您的路径在网格中,那么Grid.Background=“透明”
抱歉,这些编辑,你能试试吗?把c:标签在一个空的网格中,看看会发生什么。喜欢
<Grid Background=White>
<c:Label Left="{Binding Left}" ...x:Name="Label"/>
</Grid>您可能需要更改触发器并将其放入Grid.Style中。
https://stackoverflow.com/questions/21992062
复制相似问题