VisualTreeHelper.GetDescendantBounds() возвращает бесконечность

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

Canvas.Left, Canvas.Top, Width, ... SomeVisualItem назначаются явно.


person Ali Adlavaran    schedule 05.03.2012    source источник
comment
Когда вы это называете? Если вы вызовете это в конструкторе окна, вызовите его позже, когда визуальное дерево уже построено. например Загруженное событие   -  person nik    schedule 05.03.2012
comment
Да, я знаю. Я называю это после построения визуального дерева (например: в каком-то обработчике событий нажатия кнопки). На самом деле у меня есть прямоугольник на холсте, в котором элемент находится на том же холсте, и теперь я хочу определить, находится ли элемент в прямоугольнике или нет.   -  person Ali Adlavaran    schedule 05.03.2012
comment
Попробуйте подключить WPF Inspector. Может быть, это дает вам некоторый намек, почему это происходит.   -  person nik    schedule 05.03.2012
comment
Является ли SomeVisualItem элементом управления для клиентов?   -  person Dean Chalk    schedule 05.03.2012
comment
SomeVisualItem — это ContentControl   -  person Ali Adlavaran    schedule 05.03.2012


Ответы (1)


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

person Ali Adlavaran    schedule 06.03.2012