2012-07-05 4 views
0

나는 현재이 UI 구조를 신속하게 적용되지 않습니다. 나는 폭을 사용하지 않을 경우설정의 LayoutParams 충분히

var TotalWidth = GetNewWidth() // eg returns 1000... 

var lp = this.LayoutRoot.LayoutParameters; 
lp.Width = TotalWidth; 
this.LayoutRoot.LayoutParameters = lp; 

// this.LayoutRoot.LayoutParameters.Width == 1000 
// this.LayoutRoot.Width == 0 

this.LayoutRoot.RequestLayout(); 
this.LayoutRoot.ForceLayout(); 
this.RequestLayout();  
this.ForceLayout(); 

// this.LayoutRoot.LayoutParameters.Width == 1000 
// this.LayoutRoot.Width == 0 

이 문제가되지 않습니다,하지만 나는 :) 나는이 작업을 수행 할 수 :

this.ScrollTo(500, 0); 

이것은 전체 폭에는 영향을 미치지 않습니다

this.PostDelayed(() => this.ScrollTo((int) percent, 0), 500); 

그것은 작동 후 500ms로 델 : HSV의 아이들은, 내가 할 경우이 현재 0

이다 그러나 찬성.

HSV는 내용 자체를 관리하는 파생 클래스입니다. 빈 RL을 사용하여 이미지를 페인팅 할 때 거대한 영역을 가질 수 있습니다. 거대한 스크롤 캔버스의 종류. 또한, 내가하려고하는 것은 HSV의 재정의 된 OnSizeChanged 멤버에 있습니다. 컨트롤 크기를 조정하면 컨트롤이 같은 위치로 스크롤되도록 컨트롤을 만들고 싶습니다. 너비는 높이에 따라 다릅니다 (가로 세로 비율 유지)

답변

1

레이아웃이 다시 계산 될 때까지 기다려야합니다. forceLayout 레이아웃을 호출하면 즉시 발생하지 않고 UI 스레드의 대기열에 추가됩니다. onLayout 또는 onSizeChanged은 새로운 위치와 크기가 지정되면 모든 관여 뷰에 대해 호출됩니다. 정말로 당신이 그것에 관해 할 수있는 것은 없습니다.

+0

나는 내 가정이 틀렸길 바랐다. 그렇지 않았습니다. 감사. – Matthew