2012-03-05 5 views
0

Почему метод VisualTreeHelper.GetDescendantBounds(SomeVisualItem) возвращает (-Infinity,-Infinity,Infinity,Infinity)?«VisualTreeHelper.GetDescendantBounds()» возвращает Infinity

Canvas.Left, Canvas.Top, Width, ... явно назначены.

+0

Когда вы это называете? Если вы вызываете это на конструкторе окна, вызовите его позже, когда визуальное дерево уже построено. например, загруженное событие – nik

+0

Да, я знаю. Я называю это после создания визуального дерева (например: в каком-нибудь кнопке clickhandler) На самом деле, у меня есть прямоугольник в холсте, который Item находится в том же холсте, и теперь я хочу определить, что Item находится в прямоугольнике или не. –

+0

Возможно, попробуйте добавить [WPF Inspector] (http://wpfinspector.codeplex.com/releases/view/62380). Возможно, это дает вам некоторый намек на то, почему это происходит. – nik

ответ

2

Я решил. только я извлекал эффект от 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() хорошо работает!