Как я могу изменить размер шрифта надписи в моей ControlTemplate
-
19-08-2019 - |
Вопрос
В моем WPF ListBox у меня есть стиль с ControlTemplate для ListBoxItem. Внутри этого ControlTemplate я определил метку. Исходя из некоторых деталей, мне нужно изменить размер шрифта надписи. Итак, из моего кода мне нужно определить, каким должен быть шрифт, а затем мне нужно его установить.
Вот мой стиль с ControlTemplate (я удалил некоторые нерелевантные элементы управления)
<Style x:Key="RecordTabList" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="{DynamicResource RecordIndexTabBackcolor}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Label
x:Name="myLabel" Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Grid.RowSpan="1" Margin="3,-2,0,-2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Foreground="{DynamicResource RecordIndexTabForeground}"
FontSize="10" Height="Auto" BorderThickness="3,0,0,0"
Content="{Binding Path=Name}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
Как я могу это сделать?
Решение
Если я вас правильно понимаю, вы, вероятно, можете сделать что-то похожее на следующее и просто изменить свойство FontSize в самом ListBoxItem; это будет автоматически отражено на вашей этикетке. Скопируйте это в VS и посмотрите это в действии!
<Window.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Label Content="{TemplateBinding Content}" FontSize="{TemplateBinding FontSize}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ListBox Margin="12">
<ListBoxItem Content="Test 1" FontSize="14"/>
<ListBoxItem Content="Test 2" FontSize="18"/>
<ListBoxItem Content="Test 3" FontSize="22"/>
</ListBox>
</Grid>
Другие советы
Возможно, вы сможете использовать ValueConverter в FontSize. свойство ... но я не уверен на 100%, работают ли они внутри ControlTemplate .. Кажется, я помню, что у Silverlight были проблемы с ним, но я не помню, работал ли он в WPF.
Если вы хотите установить FontSize в коде позади, вы должны удалить FontSize из ControlTemplate, а затем установить его для ListBoxItem в коде позади. Если вы хотите установить одинаковый размер для всех ListBoxItems, просто установите FontSize для ListBox в выделенном фрагменте кода.