내가이 XAML 코드가 말할 수 있습니다 경우으로 RenderTransform을 무시 :WPF : 부모 내의 자식 UIElement의 위치를 가져옵니다. 어떤
<DockPanel Name="pan">
<Label Content="AAA" Name="lab1" />
<Label Content="BBB" Name="lab2" />
<Label Content="CCC" Name="lab3" />
</DockPanel>
내 코드 내가 lab2
의 좌표가 pan
내에서 무엇인지 찾으려 뒤에. Hovewerlab2
의 현재 RenderTransform을 무시하고 싶습니다. 이 솔루션은 동일한 좌표 위의 코드 및 다음 반환해야합니다 그래서 : 다른 말로
<DockPanel>
<Label Content="AAA" />
<Label Content="BBB" >
<Label.RenderTransform>
<TranslateTransform Y="20"/>
</Label.RenderTransform>
</Label>
<Label Content="CCC" />
</DockPanel>
을 나는 but2
에 Arrange
를 호출 할 때 pan
의 ArrangeOverride
방법으로 설정 한 위치를 원한다. 나는 그것을 논리적 위치라고 부를 것이다.
private Point visualPoss() {
Point lab2Vis = lab2.PointToScreen(new Point(0, 0));
Point panVis = pan.PointToScreen(new Point(0, 0));
return new Point(lab2Vis.X - panVis.X, lab2Vis.Y - panVis.Y);
}
그러나이 visualPoss()
의 반환 값으로서 내 문제의 해결되지 않고, 모두 XAML 코드 예는 동일하지 않은 경우 : '시각 위치 "다음 메소드를 호출함으로써 얻을 수있다.
어싱이 명확하지 않은 경우 의견을 남기십시오.
는
하나의 비틀기 ... 비주얼 트리를 최대한 멀리 걸어서 각 렌더링 트렌스 폼의 역함을 적용하고 싶을 것입니다. –
일반적인 방법에 대한 좋은 지적입니다. 이 요소는 비교에 관심이있는 패널의 하위 요소이므로이 경우 필자는 필요하다고 생각하지 않았습니다. –
당신을 dissapoint 유감스럽게 생각합니다. 그러나 이것과 매우 비슷한 것을 tryied했습니다. 그리고 그것은 효과가 없었습니다 - 유일한 차이점은 다음과 같이 원본으로부터 역변환을 만들었습니다 : lab2.RenderTransform.Inverse.Transform (lab2Vis) '. 이유는 모르겠지만 좌표를 다시 원래 위치로 변환하지 않았습니다. – drasto