2010-08-15 4 views
3

전체 패널 너비/높이의 백분율로 지정된 좌표를 가진 패널을 사용하고 싶습니다. 또한 좌표 속성을 애니메이션 할 수 있어야합니다 (예 : 버튼을 10 %에서 50 % 패널 너비로 이동).비율 좌표가있는 패널

나는이 개 시도했습니다 :

  1. 이 그리드를 사용하여 스타로 크기를 지정 - 기본 WPF로 AFAIK 별에 의해 지정된 거리 속성을 애니메이션 할 수 없기 때문에이 충분하지되었다. 나는 내가 할 수있게 해주는 커스텀 클래스를 발견했다. 그것도 효과가있다. 나는 그 솔루션이 지나치게 복잡하다고 생각한다. 나는 더 간단한 것을 찾고있다.

  2. 고정 너비와 높이를 가진 캔버스를 사용하여보기 상자 안에 넣으십시오 -이 방법은 간단한 해결책이지만,보기 상자의 크기를 조정할 때 캔버스의 전체 내용도 조정됩니다. 콘텐츠의 크기를 고정시키고 싶습니다.

간단한 해결책이 있습니까? 아니면 제 자신의 패널을 구현해야합니까 (아니면 캔버스 같은 기존 패널 중 하나를 확장해야합니까?)?

건배!

+1

Viewbox없이 캔버스를 사용하십시오. 콘텐츠는 고정 된 크기를 가지며 코드의 %를 계산할 수 있습니다. –

답변

5

나는 것 :

  • 서브 클래스 Canvas, 아마도 그것은 RelativeCanvas 또는
  • RatioCanvas이 연결된 속성 추가 전화 : 모든 어린이 이상 XRatioYRatio
  • 재정 ArrangeOverride 및 루프를. 각 아동의 경우, 계산하고 자신의 Canvas.LeftCanvas.Top 연결된 속성 값을 적용하는 자신의 XRatioActualWidthRelativeCanvasActualHeight과 함께 YRatio를 사용

다음과 같이 사용합니다 :

<local:RelativeCanvas> 
    <!-- the top-left of this button will be center of panel --> 
    <Button local:RelativeCanvas.XRatio="50" local:RelativeCanvas.YRatio="50"/> 
</local:RelativeCanvas> 

그 작업을 한 후에 추가 할 수있는 한 가지는 정렬 조정입니다. 예를 들어, 컨트롤의 가운데을 왼쪽 위 모서리가 아닌 지정된 비율에 맞출 수 있습니다.

+0

고마워요! 나는 ArrangeOverride 메소드에 대해 몰랐다. 이것은 가장 깨끗한 솔루션 인 것 같다. 새로운 패널을 재사용 할 수있는 DLL에 넣을 것이다. – madbadger

+0

자세히 설명해 주시겠습니까? XRatio와 YRatio를 기반으로 새로운 왼쪽과 위쪽을 계산하는 방법? XRatio와 Yratio를 얻는 방법? – GANI