2013-11-20 36 views
2

我試圖開發一個WPF控件,其中有一個TextBlock。對於ItemsControl,此控件將顯示在DataTemplate中。在這個控件中,我希望控件默認具有固定的高度(比方說150來設置基線)。 TextBlock將根據可用像素數量修剪其內容。我也有一個「擴展」按鈕,我想要擴展該文本框的行爲是所需的高度,使所有文本顯示沒有任何修剪。設計一個具有可擴展TextBlock的WPF控件

只要我的TextBlock高度不受限制,基於代碼here,我有修剪檢測工作。看起來我可能不得不停下自定義控制路線並覆蓋ArrangeMeasure,但我希望只用XAML就能解決這個問題。

我的ViewModel將具有IsExpanded屬性,ToggleTextExpansionCommand命令將在執行時切換。我不知道我應該怎麼做我的IsExpanded觸發器,但是,使TextBlock擴大佔用所有需要的空間。

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將會很大,但它只會截斷文本。我也不知道如何指定*作爲一個RowHeight意味着如果網格高度是自動的。 – sohum

+1

我會將按鈕和TextBlock包裝在它自己的容器中,並將網格高度綁定到該容器的實際高度,使用硬編碼值會使事情變得更加困難 –

回答

1

答案被sa_ddam213提供。如果他用答案更新這個問題,我會將其標記爲正確的。基本上,包含Grid的高度爲140的高度將設置爲自動。