このMSDN フォーラム スレッドGroupBox
で説明されているように、子コントロールに無限の幅が割り当てられるという問題がありました。
実際、 a を に設定するMaxWidth
とCheckBox
、テキストのトリミングが機能し、省略記号が表示されました。
ただし、CheckBox
実行時に最大幅を変更する必要がありました。
MultiValueConverterを使用して を3 つの列の合計MaxWidth
にバインドしようとしましたが、メソッドは初期化中にのみ呼び出されていました (これは、子コントロールにサイズを割り当てる方法に関係していると思います)。CheckBox
ActualWidth
Convert
GroupBox
とにかく、 を削除し、代わりに aを使用して、すべてを で囲むことで、私が望むものを達成することができましChechkBox
た。AccessText
TextBlock
StackPanel
Border
<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>
のサイズが変更されると、イベント ハンドラーで StackPanel の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
a を使用できる場合は、以下に示すように、イベント処理を行わなくても自動的に機能します。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"
基本的に にTextBox
必要なだけのスペースを確保できるため、TextTrimming
機能しないためです。