我試圖開發一個WPF控件,其中有一個TextBlock
。對於ItemsControl
,此控件將顯示在DataTemplate
中。在這個控件中,我希望控件默認具有固定的高度(比方說150來設置基線)。 TextBlock
將根據可用像素數量修剪其內容。我也有一個「擴展」按鈕,我想要擴展該文本框的行爲是所需的高度,使所有文本顯示沒有任何修剪。設計一個具有可擴展TextBlock的WPF控件
只要我的TextBlock高度不受限制,基於代碼here,我有修剪檢測工作。看起來我可能不得不停下自定義控制路線並覆蓋Arrange
和Measure
,但我希望只用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>
你能不能在觸發器中將TextBlock Height設置爲Auto? –
@ sa_ddam213如果我這樣做,那麼我的網格高度是多少?自動?如果我將網格高度設置爲一個值,那麼TextBlock將會很大,但它只會截斷文本。我也不知道如何指定*作爲一個RowHeight意味着如果網格高度是自動的。 – sohum
我會將按鈕和TextBlock包裝在它自己的容器中,並將網格高度綁定到該容器的實際高度,使用硬編碼值會使事情變得更加困難 –