textblock.Inlines.Contain() 命中测试有困难吗?
Difficulty with textblock.Inlines.Contain() with hit testing?
在我的 inkcanvas 的 PreviewMouseDown 事件处理程序中,我对底层 textBlock 进行了命中测试,如下所示。命中测试正确 returns 内联集合的 运行 元素。那么为什么相同的 运行 元素(内联类型)没有被 textBlock 视为 "contained"?
void CustomInkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
CustomInkCanvas cink = sender as CustomInkCanvas;
TextBlock tb = GetVisualChild<TextBlock>(cink);
Point p = e.GetPosition(tb);
/** THIS IS CORRECT AND RETURNS THE CORRECT VALID RUN (of type Inline).
Run run = tb.InputHitTest(p) as Run;
??? BUT DEBUG HERE STATES THAT THE RUN IS NOT CONTAINED BY THE TEXTBLOCK ??
Debug.Assert(tb.Inlines.Contains(run) != true, "Where is the run?");
}
提前感谢您对此的任何指导。
运行 可能是其中一个内联的(直接或间接)子元素,因此它本身不是顶级内联集合的元素。
在下面的XAML中,Inlines 集合包含两个元素,一个运行 和一个Bold。另一个 运行 是 Bold 元素的子元素。
<TextBlock>
<TextBlock.Inlines>
<Run Text="Hello,"/>
<Bold>
<Run Text="World."/>
</Bold>
</TextBlock.Inlines>
</TextBlock>
在我的 inkcanvas 的 PreviewMouseDown 事件处理程序中,我对底层 textBlock 进行了命中测试,如下所示。命中测试正确 returns 内联集合的 运行 元素。那么为什么相同的 运行 元素(内联类型)没有被 textBlock 视为 "contained"?
void CustomInkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
CustomInkCanvas cink = sender as CustomInkCanvas;
TextBlock tb = GetVisualChild<TextBlock>(cink);
Point p = e.GetPosition(tb);
/** THIS IS CORRECT AND RETURNS THE CORRECT VALID RUN (of type Inline).
Run run = tb.InputHitTest(p) as Run;
??? BUT DEBUG HERE STATES THAT THE RUN IS NOT CONTAINED BY THE TEXTBLOCK ??
Debug.Assert(tb.Inlines.Contains(run) != true, "Where is the run?");
}
提前感谢您对此的任何指导。
运行 可能是其中一个内联的(直接或间接)子元素,因此它本身不是顶级内联集合的元素。
在下面的XAML中,Inlines 集合包含两个元素,一个运行 和一个Bold。另一个 运行 是 Bold 元素的子元素。
<TextBlock>
<TextBlock.Inlines>
<Run Text="Hello,"/>
<Bold>
<Run Text="World."/>
</Bold>
</TextBlock.Inlines>
</TextBlock>