Я решил. только я извлекал эффект от ViewBox в ControlTemplate моего элемента управления:
<Viewbox Opacity=".7" Stretch="Uniform" IsHitTestVisible="False" FocusVisualStyle="{x:Null}" IsEnabled="False" ForceCursor="False" x:Name="PART_OutThumb">
<Viewbox.Effect>
<BlurEffect KernelType="Gaussian" Radius="1" />
</Viewbox.Effect>
</Viewbox>
To:
<Viewbox Opacity=".7" Stretch="Uniform" IsHitTestVisible="False" FocusVisualStyle="{x:Null}" IsEnabled="False" ForceCursor="False" x:Name="PART_OutThumb">
</Viewbox>
Теперь VisualTreeHelper.GetDescendantBounds()
хорошо работает!
Когда вы это называете? Если вы вызываете это на конструкторе окна, вызовите его позже, когда визуальное дерево уже построено. например, загруженное событие – nik
Да, я знаю. Я называю это после создания визуального дерева (например: в каком-нибудь кнопке clickhandler) На самом деле, у меня есть прямоугольник в холсте, который Item находится в том же холсте, и теперь я хочу определить, что Item находится в прямоугольнике или не. –
Возможно, попробуйте добавить [WPF Inspector] (http://wpfinspector.codeplex.com/releases/view/62380). Возможно, это дает вам некоторый намек на то, почему это происходит. – nik