2009-12-30 4 views
18

나는 ScrollViewer 안에 TextBlock이 있고 그 창에 늘어서 있습니다. 나는 다음과 같은 행동을하는 TextBlock 필요합니다 일정 폭 이하로 크기를 조정할 때 C# WPF - ScrollViewer + TextBlock 문제

  • TextBlock 요구가 계속

    • 가 창 크기를 조정, 아니 스크롤바 MinWidth 및 스크롤바는
    • TextWrapping 또는 TextTrimming 작동합니다 나타납니다 적절하게

    이 기능을 어떻게 얻을 수 있습니까?

    나는 여러 가지 방법으로 시도했는데, ActualWidth & ActualHeight에 대한 바인딩을 포함하고 있지만 작동시키지 못했습니다.

    어렵지 않을 것입니다. 무엇이 누락 되었습니까? 자세한 내용없이

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
          <TextBlock TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." /> 
        </ScrollViewer> 
    </Window> 
    
  • +0

    설명 : 스크롤 뷰어가 컨트롤의 템플릿에 내장되어 있습니까? 아니면 컨트롤 외부입니까? –

    +0

    위처럼 보일 수 있습니다. – jonathanpeppers

    답변

    23

    이 작동 :

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Name="Scroller"> 
          <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="100" Width="{Binding ElementName=Scroller, Path=ViewportWidth}" 
          TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." /> 
        </ScrollViewer> 
    </Window> 
    
    +1

    그렇습니다. 한 가지 방법입니다. 렌더링 후 폭 바인딩이 발생하기 때문에 레이아웃 엔진이 시각적 트리에서 여러 번 반복 될 수 있습니다. 다른 레이아웃이 강제로 전달됩니다. –

    +1

    다른 방법이 있습니까? – jonathanpeppers

    +0

    예 적절한 방법은 측정 값을 수정하고 스크롤 뷰어, 텍스트 블록 또는 일부 사용자 정의 요소 사이의 논리를 정렬하는 것입니다. 나는 '그 일을하고있다'라는 코멘트를 썼던 이래로 내 뇌를 알아 내려고 노력했다. :) –

    2

    , 내가이 일을의 표준 방법을 제공한다 할 수있는 최선 : 여기

    은 XamlPad에 넣어 코드 샘플 (더 minWidth를 아직 설정되어 있지 않은)입니다. 기본적으로 스크롤 뷰어에서 요소 (최소 크기)를 호스팅하십시오. 스크롤 뷰어의 크기가 충분히 작아서 요소가 내부에 완전히 들어 가지 않으면 스크롤 막대가 자동으로 표시됩니다. 예 :

    <ScrollViewer> 
        <Button MinWidth="100" MinHeight="50"/> 
    </ScrollViewer> 
    
    +0

    흠, 이것은 XamlPad에서 작동하지만 내 응용 프로그램에서는 작동하지 않습니다. 나는 이유를 알아 내기 위해 파기해야 할 것이다. – jonathanpeppers

    +0

    내 컨트롤이 TextBlock이기 때문입니다. 위의 편집을 참조하십시오. – jonathanpeppers

    +0

    달성하려는 행동은 정확히 무엇입니까? 'TextBlock'에도'MinWidth'와'MinHeight'를 설정할 때 작동 할 것입니다. –