我有一个位于网格中的复选框,其列跨度为3,其中2列可调整大小,并且可以在运行时调整大小。
我希望复选框在文本不适合时显示省略号,但无法使其生效。
这是我的XAML代码。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
...
<CheckBox IsEnabled="False" Grid.Row="2" Padding="5" Margin="11,12,0,0" Name="chkSelectedCat" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.ColumnSpan="3">
<AccessText Text="Search in selected category only." TextTrimming="CharacterEllipsis"/>
</CheckBox>
提前感谢您的帮助。
修改
有问题的CheckBox
位于Grid
内,而GroupBox
又包含在GridSplitter
中,该{{1}}位于与使用{{调整大小的列相邻的列中的列中1}}。
答案 0 :(得分:0)
问题在于,GroupBox
为其子控件分配了无限宽度,如此MSDN forum thread.所述
事实上,将MaxWidth
设置为CheckBox
时,文本修剪功能正常并显示省略号。
但是,在运行时需要更改CheckBox
最大宽度。
我尝试使用MultiValueConverter将MaxWidth
的{{1}}绑定到三列的总CheckBox
,但ActualWidth
方法只是在初始化期间被调用(我认为这与Convert
如何为其子控件分配大小有关。)
无论如何,我设法通过移除GroupBox
的{{1}}并在ChechkBox
中使用AccessText
来取代我想要的内容,然后将所有内容包围起来TextBlock
。
StackPanel
当Border
的大小发生变化时,我会更新事件处理程序中StackPanel的<Border Grid.Row="2" Grid.ColumnSpan="3" Name="chkBorder" SizeChanged="chkBorder_SizeChanged">
<StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
<CheckBox IsEnabled="False" Padding="0" Margin="11,7,0,5" Name="chkSelectedCat" VerticalAlignment="Center"/>
<TextBlock Foreground="Black" Name="txtChkSelectedCat" Text="Search in selected category only." TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" VerticalAlignment="Center" Margin="0,5,5,5"/>
</StackPanel>
</Border>
,并Border
中的文本相应修剪。
Width
希望这可以帮助将来的某个人(即使它有点像黑客)。
<强>更新强>
如果您可以取消TextBox
并改为使用private void chkBorder_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.txtChkSelectedCat.Width = this.chkBorder.ActualWidth - this.chkSelectedCat.ActualWidth - 11 - 5 - 5; // margins
}
,则StackPanel
会自动生效,而不必进行任何事件处理,如下所示。
Grid
确保将包含文本框的列的TextTrimming
设置为<Grid Grid.Row="2" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsEnabled="False" Padding="0" Margin="11,7,0,5" Name="chkSelectedCat" VerticalAlignment="Center" ToolTipService.ShowOnDisabled="True"/>
<TextBlock Grid.Column="1" Foreground="Black" Name="txtChkSelectedCat" Text="Search in selected category only." TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" VerticalAlignment="Center" Margin="0,5,5,5" MouseLeftButtonDown="txtChkSelectedCat_MouseLeftButtonDown" ToolTip="{Binding ElementName=chkSelectedCat, Path=ToolTip}" />
</Grid>
,因为Width
基本上告诉"*"
它可以拥有所需的空间,所以"Auto"
不起作用。