2017-10-18 5 views
1

UWP에는 디자인 문제가 있습니다. 레이아웃 작업의 결과를 저장하는 ActualHeight/ActualWidth는 항상 실수입니다. 그러나 업데이트 빈도가 너무 높기 때문에 UWP는 변경 될 때이를 알리지 않습니다.UWP의 다른 요소의 크기 (너비/높이)에 바인딩하는 올바른 방법은 무엇입니까?

높이/너비는 변경 알림을 제공하지만 개체가 부모를 채우기 위해 늘리도록 설정된 경우처럼 종종 NaN 일 수 있습니다.

대답은 다음과 같이 보입니다.하지 마십시오. SizeChanged를 구독하고 ActualHeight 및 ActualWidth를 사용하여 크기에 따라 속성을 직접 조정하십시오.

그러나 나는 모든 하위 컨트롤이 올바르게 다시 그리는 것이 아니고 후자의 다른 문제가 발생합니다. SizeChanged 이벤트가 때때로 삭제되고 일부 자식 컨트롤이 이전 크기 값으로 인해 멈추기 때문인 것처럼 보입니다. 이 문제는 빠른 크기 조정으로 더욱 두드러집니다. 느린 작은 크기 조정은 올바르게 다시 그리게합니다. UWP 렌더링 프레임 워크는 성능 향상을 위해 드로잉하는 동안 발생하는 작업량을 줄이려고합니다.

어떻게해야할까요? 그리고/또는 계속 SizeChanged를 사용하는 경우 최종 값이 렌더링되도록하거나 모든 SizeChanged 이벤트를 수신 할 수 있도록 작업을 줄이는 방법은 무엇입니까?

(Win10 16,299 SDK/w) UPDATE :하여 SizeChanged의 잘못된 행동으로 인해 이벤트 핸들러 논리의 내 misordering에 일부였다. 그러나 동일하게 배치되어야하는 객체가 정렬되지 않는 프레임이 있습니다. 추가 검사에서 그리드 위치 지정에 버그가있는 것 같습니다.

답변

1

TextBox와 ComboBox라는 두 가지 요소가 있다고 가정 해 보겠습니다. 텍스트 상자의 크기가 변경 될 때마다 콤보 상자의 크기도 변경해야합니다. this을 참조하십시오.

<TextBox Name="TextBox1"></TextBox> 
<ComboBox Width={Binding ElementName=TextBox1 Path=Width} 
      Height={Binding ElementName=TextBox1 Path=Height}><ComboBox/> 

cs 파일로 바인딩하려는 경우. 코드 파일에 바인딩에 대한 자세한 내용은

TextBox TextBox1=new TextBox(); 
    Binding WidthBinding=new Binding(); 
    WidthBinding.Source=ViewModelClass; 
    WidthBinding.Path=new PropertyPath("WidthPropertyInViewModelClass"); 
    WidthBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
    BindingOperations.SetBinding(TextBox1, TextBox.WidthProperty, WidthBinding); 

this을보고, this

+0

나는 감사 내 요구는 조금 더 복잡하지만, 그 : 당신은이 작업을 수행 할 수 있습니다. 객체에 동적으로 코드를 추가하고 매개 변수가있는 ValueConverter를 통해 비례 적으로 배치합니다. 그리고 객체가 자동 크기 조정되면, 높이와 너비는 요소의 크기에 관계없이 NaN입니다. –

+0

@NickBauer 'Width'와'Height'는 절대 설정하지 않으면 항상'NaN'이됩니다. 'ActualWidth'와'ActualHeight' 또는'RenderSize'를 사용할 수 있습니다 -이 속성들은'SizeChanged' 이벤트 후에 초기화됩니다. 그리고'x : Bind'를 사용해보십시오 - 더 빨라지고 더 많은 기능을 가지고 있습니다. –

+0

@NickBauer 답변을 업데이트했습니다. 도움을받을 수 있기를 바랍니다. –