2013-11-20 1 views
2

TextBlock이 포함 된 WPF 컨트롤을 개발하려고합니다. 이 컨트롤은 ItemsControl에 대해 DataTemplate에 표시됩니다. 이 컨트롤에서는 기본적으로 컨트롤의 높이를 고정 높이로 설정합니다 (기준선을 설정하려면 150이라고합시다). TextBlock은 사용 가능한 픽셀 수에 따라 내용을 트리밍합니다. 또한 "확장"버튼을 사용하여 텍스트 상자를 원하는 높이로 확장하여 트리밍없이 모든 텍스트를 표시 할 수 있도록하려고합니다.확장 가능한 TextBlock이있는 WPF 컨트롤 디자인

here 코드를 기반으로 TextBlock 높이가 제한되지 않는 한 트리밍 감지 기능이 작동합니다. 사용자 지정 컨트롤 경로를 따라 가서 ArrangeMeasure을 무시해야하지만 XAML로 해결할 수 있기를 바랍니다.

내 ViewModel은 ToggleTextExpansionCommand 명령이 실행될 때 토글 할 IsExpanded 속성을 갖습니다. 그러나 TextBlock이 필요한 모든 공간을 차지하도록 확장하려면 내 IsExpanded 트리거에서 무엇을해야하는지 잘 모르겠습니다.

내 다음과 같이 DataTemplate 지금 보이는 :

<DataTemplate> 
    <Grid Height="140"> 
     <Grid.RowDefinitions> 
      <!-- other rows exist --> 
      <RowDefinition Height=*" /> <!-- textblock row --> 
     </Grid> 

     <!-- other content --> 
     <TextBlock x:Name="MyTextBlock" Grid.Row="2" Text="{Binding MyText}" /> 

     <Button x:Name="ExpanderButton" Command="{Binding ToggleTextExpansionCommand}" Visibility="Collapsed" /> 
    </Grid> 

    <DataTemplate.Triggers> 
     <Trigger SourceName="MyTextBlock" Property="Controls:TextBlockServices.IsTextTrimmed" Value="True"> 
      <Setter TargetName="ExpanderButton" Property="Visibility" Value="Visible" /> 
     </Trigger> 
     <DataTrigger Binding="{Binding IsExpanded}" Value="True"> 
      <!-- what do I do here?? --> 
     </DataTrigger> 
    </DataTemplate.Triggers /> 
</DataTemplate> 
+1

트리거에서 TextBlock Height를 Auto로 설정할 수만 있습니까? –

+0

@ sa_ddam213 내가 그렇게하면 그리드 높이를 어떻게 설정합니까? 자동? 눈금 높이를 값으로 설정하면 TextBlock은 커지지 만 텍스트가 잘릴 것입니다. 또한 Grid 높이가 Auto 인 경우 RowHeight를 지정하는 것이 무엇을 의미하는지 알지 못합니다. – sohum

+1

버튼과 TextBlock을 자체 컨테이너에 랩핑하고 그 컨테이너의 ActualHieght에 Grids 높이를 바인딩합니다. 하드 코드 된 값을 사용하면 훨씬 더 힘들어집니다. –

답변

1

대답은 sa_ddam213에 의해 제공되었다. 그가이 질문을 답으로 업데이트하면 나는 그것을 올바른 것으로 표시 할 것입니다. 기본적으로 높이가 140 인 Grid을 포함하면 높이가 자동으로 설정됩니다.

관련 문제