Pergunta

Na minha WPF ListBox, eu tenho um estilo com um ControlTemplate para um ListBoxItem. Dentro dessa ControlTemplate Eu tenho um rótulo definido. Com base em alguns detalhes, eu preciso mudar o tamanho da fonte do rótulo. Então, do meu código-behind, eu preciso determinar o que a fonte deve ser e então eu preciso configurá-lo.

Aqui está o meu estilo com o ControlTemplate (Eu retirados alguns controles irrelevantes)

<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>

Como posso fazer isso?

Foi útil?

Solução

Se eu entendi corretamente, você provavelmente pode fazer algo semelhante ao seguinte, e simplesmente alterar a propriedade FontSize no próprio ListBoxItem; ele será refletido automaticamente no seu rótulo. Copie isso em VS e vê-lo em ação!

<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>

Outras dicas

Você pode ser capaz de usar um ValueConverter na TamanhoDoTipoDeLetra propriedade .. mas eu não estou 100% de certeza se eles trabalham dentro de um ControlTemplate .. Eu me lembro Silverlight tendo problemas com ele, mas eu não me lembro se ele trabalhou em WPF.

Se você quiser definir a FontSize no de trás do código, você deve remover FontSize do ControlTemplate, em seguida, configurá-lo para o ListBoxItem no código-behind. Se você deseja definir o mesmo tamanho para todos os ListBoxItems apenas definir a FontSize do ListBox no código-behind.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top