I'll jump to the chase: Is there any way to tell the WPF TextBlock to measure itself such that its size doesn't change when its FontWeight changes?
I have a TextBlock that changes font weights dynamically based on a style. The TextBlock is inside a RadioButton so it is Bold when checked, Normal otherwise:
<Style x:Key="BoldWhenChecked" TargetType="RadioButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="TextElement.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style
and here are the radio buttons themselves:
<StackPanel Orientation="Horizontal">
<RadioButton Style="{StaticResource BoldWhenChecked}">
<TextBlock Text="Item 1" />
</RadioButton>
<RadioButton Style="{StaticResource BoldWhenChecked}">
<TextBlock Text="Item 2" />
</RadioButton>
<RadioButton Style="{StaticResource BoldWhenChecked}">
<TextBlock Text="Item 3" />
</RadioButton>
etc...
</StackPanel>
Unfortunately, since I am not using a fixed-width font the width of the TextBlock changes when the font weight changes, and the entire panel of radio buttons shifts accordingly, which is visually jarring.
I created a work-around for this by adding a hidden TextBlock in the content of the RadioButton with its FontStyle explicitly set to Bold:
<RadioButton Style="{StaticResource BoldWhenChecked}">
<Grid>
<TextBlock Text="Item 1" />
<TextBlock Text="Item 1" FontStyle="Bold" Visibility="Hidden" />
</Grid>
</RadioButton>
That way when the RadioButton is selected and the visible TextBlock is made bold, the width does not change because the hidden TextBlock has already sized the grid appropriately.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With