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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top