2013-10-12 2 views
0

나는이 문제를 몇 번 겪어 왔지만 아직 간단한 해결책을 찾지 못했습니다. TextBlock (TextWrapping="Wrap" 포함)이 너비를 지정하지 않는 다른 요소 안에 포함 된 경우 TextBlock은 부모가 허용하는 크기만큼 확장되어 먼저 텍스트를 감싸는 대신에 확장합니다. 예를 들어 현재 TextBlockValidationTemplate으로 작업 중입니다. 템플릿이 현재 TextBox의 폭보다 긴 텍스트를 처리하는 방법은 다음과 같습니다 분명히 최적이 아닌TextBlock이 레이아웃에 영향을 미치지 않도록 포장하십시오.

Current validation template

합니다.

<ControlTemplate> 
    <DockPanel LastChildFill="True"> 
    <Border DockPanel.Dock="Top" BorderBrush="Red" BorderThickness="1"> 
     <DockPanel> 
     <AdornedElementPlaceholder x:Name="TargetTextBox" /> 
     <Grid x:Name="WarningBoxContainer" Background="Red" Width="{Binding ElementName=TargetTextBox, Path=ActualHeight}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"> 
      <Path Margin="5" Stretch="Fill" Fill="#FFFFFFFF" Data="F1 M 26.9166,22.1667L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z "/> 
     </Grid> 
     </DockPanel> 
    </Border> 
    <Border DockPanel.Dock="Top" Margin="0,2,0,0"> 
     <TextBlock Text="Something very terrible has happened" TextWrapping="Wrap"/> 
    </Border> 
    </DockPanel> 
</ControlTemplate> 

누군가가 시도하기 전에 TextBlock 랩을 만드는 방법을 알고 있나요

:

여기 Desired validation template

첫 번째 레이아웃을 생성 년대 ControlTemplate에 대한 XAML입니다 : 여기가 표시 할 방법 넓히다?

답변

0

물론 게시 한 지 몇 분 후에 답변을 찾을 수 있습니다.

this 게시물의 너비가 TextBlock 인 바인딩을 사용하는 아이디어가 있습니다.

<ControlTemplate> 
    <DockPanel LastChildFill="True"> 
    <Border DockPanel.Dock="Top" BorderBrush="Red" BorderThickness="1"> 
     <DockPanel> 
     <AdornedElementPlaceholder x:Name="TargetTextBox" /> 
     <Grid x:Name="WarningBoxContainer" Background="Red" Width="{Binding ElementName=TargetTextBox, Path=ActualHeight}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"> 
      <Path Margin="5" Stretch="Fill" Fill="#FFFFFFFF" Data="F1 M 26.9166,22.1667L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z "/> 
     </Grid> 
     </DockPanel> 
    </Border> 
    <Border DockPanel.Dock="Top" Margin="0,2,0,0"> 
     <TextBlock Text="Something very terrible has happened" TextWrapping="Wrap" HorizontalAlignment="Left" Width="{Binding ElementName=TargetTextBox, Path=ActualWidth}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"/> 
    </Border> 
    </DockPanel> 
</ControlTemplate> 

최종 제품 :

enter image description here

AdornedElementPlaceholder 요소의 ActualWidthTextBlock의 폭을 바인딩 내 경우

는 그것을했다

관련 문제