문제

나는 현재 함께 일하고 있습니다 Panelwpf에서 s, 그리고 나는 Width 그리고 Height 속성에는 다른 두 가지 속성이 호출됩니다 ActualWidth 그리고 ActualHeight.

ActualWidth

이 요소의 렌더링 된 너비를 가져옵니다. 이것은 종속성 속성입니다. (프레임 워크 레포먼트에서 상속.)

Width

요소의 너비를 가져 오거나 설정합니다. 이것은 종속성 속성입니다. (프레임 워크 레포먼트에서 상속.)

참조: MSDN

누구나 지적 할 수 있습니다 둘과 어느 쪽을 사용 해야하는지의 차이점?

도움이 되었습니까?

해결책

Width/Height 입니다 요청 또는 레이아웃 크기. 자동으로 설정하면 값은 double.NaN 뒤에 코드로 속성에 액세스 할 때.

ActualWidth/ActualHeight 입니다 렌더링 크기. 항목의 실제 크기를 원하거나 필요한 경우이 속성을 사용하십시오.

다른 팁

나는 찾았다 ActualWidth 한 요소의 너비 또는 높이를 다른 요소에 바인딩하고 싶을 때 가장 유용합니다.

이 간단한 예제에는 나란히 배열 된 두 개의 버튼과 아래에 두 개의 버튼이 포함 된 스택 패널의 너비에 제한된 주석이 있습니다.

<StackPanel>

    <StackPanel Margin="0,12,0,0" Orientation="Horizontal" Name="buttonPanel" HorizontalAlignment="Left" >
         <Button Content="Yes - Arm the missile" FontWeight="Bold" HorizontalAlignment="Left"/>
         <Button Content="No - Save the world" HorizontalAlignment="Left" Margin="7,0,0,0"/>
    </StackPanel>

    <TextBlock Text="Please choose whether you want to arm the missile and kill everybody, or save the world by deactivating the missile." 
               Width="{Binding Path=ActualWidth,ElementName=buttonPanel}" Margin="0,5,0,0" HorizontalAlignment="Left" TextWrapping="Wrap"/>

</StackPanel>

ActualWidth 값의 패딩을 설명하므로 언제든지 전화 할 수있는 번호를 알아야합니다. Actualwidth 너비 대신에 계산을 피하십시오.

편집 : 제거 된 마진 B/C 실제 전체의 일부가 아닙니다.

ActualWidth 렌더링 시스템에 의해 설정되며 다른 요소의 너비와 전체 크기 제약 조건에 따라 다를 수 있습니다. 결과적으로 변경할 수 없습니다. Width 변경할 수있는 속성이며 요소의 폭을 늘리거나 줄이는 데 사용해야합니다.

에서 MSDN:

이 속성은 다른 너비 입력 및 레이아웃 시스템을 기준으로 계산 된 값입니다. 값은 실제 렌더링 패스를 기반으로 레이아웃 시스템 자체에 의해 설정되므로 다음과 같은 속성의 설정 값보다 약간 뒤떨어 질 수 있습니다. Width 이것이 입력 변경의 기초입니다.

아주 좋은 이유가 있습니다 사용하지 마십시오 ActualWidth (분명히 ActualHeight 따라서). 당신이 설정할 때 Width 요소의 ActualWidth 당신이 할 수있는 다른 사람의 레이아웃 체인을 깨십시오.

최선의 경우 부모의 레이아웃 프로세스 (바인딩 소스)가 완료된 후 요소/제어를 구문 분석해야합니다. 그것은 추가 시간을 의미합니다. 부모와 동일한 계층 수준 인 경우 레이아웃 프로세스는 결정적인 크기를 계산하기 위해 적어도 두 개의 실행이 필요합니다.

예를 들어, 나는 그것을 TemplatedParent (하지 마):

<Rectangle DockPanel.Dock="Top" Width="{TemplateBinding ActualWidth}" 
           Height="1" Fill="#000000"/>

포함 된 창을 크기를 조정할 때 컨트롤은 컨테이너가 점점 작아지고 레이아웃을 제동하지 못하게합니다. 그것을 설정합니다 Width 문제를 해결합니다 (하다):

<Rectangle DockPanel.Dock="Top" Width="{TemplateBinding Width}" 
           Height="1" Fill="#000000"/>

사용해야하는 경우 ActualWidth 일반적으로 XAML에 문제가 있습니다. 레이아웃 실행의 최종 크기를 엉망으로 만드는 대신 더 잘 수정하십시오.

정확히 렌더 너비! = 레이아웃 너비입니다. 하나는 레이아웃에 사용되도록 의도되어 있습니다. 다른 하나는 렌더링 용입니다. Winforms와 마찬가지로 크기와 클라이언트 크기 속성이 있었고, 약간 다르고, 렌더링의 atual/클라이언트 크기와 레이아웃의 너비/높이를 사용해야합니다.

당신은 설정할 수 있습니다 Width 재산은 아니지만 ActualWidth 재산.

그만큼 Width 속성은 패널 렌더링 방법을 결정하는 데 사용됩니다. ActualWidth 사용 된 실제 너비로 설정됩니다. 이것은 아동 요소의 크기와 부모 요소의 구성에 따라 너비와 동일하지 않을 수 있습니다.

그만큼 ActualWidth 설정할 때 즉시 설정되지 않습니다 Width 속성이지만 렌더링 중에 업데이트됩니다 (한 번 이상).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top