문제

수직 WPF를 어떻게 제한 할 수 있습니까? StackPanel가장 좁은 품목에 대한 너비는 포함되어 있습니다. 그만큼 StackPanel의 폭은 다른 어린이 요소의 너비보다 크지 않아야합니다.

도움이 되었습니까?

해결책

불행히도 ivalueconverter 접근 방식은 항상 작동하지는 않습니다. 아이들이 추가 된 경우 스택 패널 예를 들어, 정적으로, 아동 컬렉션은 바인딩 시점에 비어 있습니다 (그래서 발견). 가장 간단한 솔루션은 사용자 정의 패널을 만드는 것입니다.

public class ConstrainedStackPanel : StackPanel
{
    public ConstrainedStackPanel()
    {
    }

    protected override Size MeasureOverride(Size constraint)
    {
        foreach (var item in this.Children)
        {
            // FrameworkElement has the Width property we care about.
            FrameworkElement element = item as FrameworkElement;
            if (element != null)
                constraint.Width = Math.Min(element.Width, constraint.Width);
        }

        return base.MeasureOverride(constraint);
    }

    protected override Size ArrangeOverride(Size arrangeSize)
    {
        foreach (var item in this.Children)
        {
            // FrameworkElement has the Width property we care about.
            FrameworkElement element = item as FrameworkElement;
            if (element != null)
                arrangeSize.Width = Math.Min(element.Width, arrangeSize.Width);
        }

        return base.ArrangeOverride(arrangeSize);
    }
}

다음 XAML에 의해 설명 된대로 패널을 사용할 수 있습니다.

<StackPanel Margin="5">
    <TextBlock Text="StackPanel:" FontWeight="Bold" />
    <StackPanel x:Name="panelA">
        <Button Width="100" Content="100" />
        <Button Width="200" Content="200" />
        <Button Width="300" Content="300" />
        <Button Width="400" Content="400" />
    </StackPanel>
    <TextBlock Text="ConstrainedStackPanel:" FontWeight="Bold" Margin="0,10,0,0" />
    <l:ConstrainedStackPanel x:Name="panelB">
        <Button Width="100" Content="100" />
        <Button Width="200" Content="200" />
        <Button Width="300" Content="300" />
        <Button Width="400" Content="400" />
    </l:ConstrainedStackPanel>
</StackPanel>

다음과 같은 것을 렌더링합니다.

ScreenShot

이게 도움이 되길 바란다.

다른 팁

값을 상쇄하기 위해 컨버터를 생성조차조차도 실제 전체 속성에 바인딩을 시도했으며, 이는 한 가지 예외로 훌륭하게 작동합니다. 컨테이너의 크기를 확장하면 너비가 올바르게 업데이트되지만 컨테이너를 더 작게 만들 때 실제 콘텐츠의 너비는 작아 지지만 모든 스크롤 뷰어의 "페이지 너비"는 그렇지 않습니다. 나는 이것을 해결하는 방법이 있다고 확신하지만, 나는 그것을 찾지 못했습니다.

당신은 할 수 없습니다. 수직 지향 StackPanel 어린이가 요청하는만큼 항상 많은 폭을 할당합니다.

원하는 행동을 달성하기 위해 사용자 정의 패널을 작성하는 것이 가장 좋습니다.

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