Comment puis-je changer la taille de la police d'une étiquette dans mon ControlTemplate
-
19-08-2019 - |
Question
Dans mon WPB ListBox, j'ai un style avec un ControlTemplate pour un ListBoxItem. À l'intérieur de ce ControlTemplate, j'ai une étiquette définie. Sur la base de certains détails, je dois changer la taille de la police de l’étiquette. Donc, à partir de mon code-behind, je dois déterminer quelle doit être la police, puis je dois la définir.
Voici mon style avec le ControlTemplate (j'ai supprimé certains contrôles non pertinents)
<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>
Comment puis-je faire cela?
La solution
Si je vous ai bien compris, vous pouvez probablement faire quelque chose de similaire à ce qui suit et changer simplement la propriété FontSize sur le ListBoxItem lui-même; cela se reflètera automatiquement sur votre étiquette. Copiez ceci dans VS et voyez-le en action!
<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>
Autres conseils
Vous pourrez peut-être utiliser un ValueConverter sur FontSize. propriété .. mais je ne suis pas sûr à 100% si elles fonctionnent à l'intérieur d'un ControlTemplate .. Je semble me souvenir que Silverlight a eu des problèmes avec cela, mais je ne me souviens pas s'il a fonctionné dans WPF.
Si vous souhaitez définir FontSize dans le code behind, vous devez supprimer FontSize du ControlTemplate, puis le définir pour ListBoxItem dans le code-behind. Si vous voulez définir la même taille pour tous les ListBoxItems, il suffit de définir le FontSize du ListBox dans le code-behind.