Как изменить размер шрифта в двух разных элементах управления пользователя WPF?

Я создал и внедрил WPf UserContol, например Window8 PasswordBox. Когда я меняю шрифт, текстовое поле и внутренняя кнопка изменились. К сожалению, размер шрифта кнопки не подходит, если размер шрифта текстового поля идеален. (См. Изображение - вторая кнопка имеет идеальный размер шрифта кнопки, а текстовое поле - нет. И третья кнопка не идеальна, но текстовое поле имеет идеальный размер шрифта)

Как я могу установить размер шрифта для двух элементов управления во время реализации? Как свойство Button_fontSize и textbox_fontSize.

Мой пользовательский код XAML:

        <Grid.Resources>
            <Style x:Key="ButtonWithoutHover" TargetType="Button">
                <Setter Property="OverridesDefaultStyle" Value="True"/>
                <Setter Property="Margin" Value="0"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border Name="border" 
                            BorderThickness="3"                                                        
                            BorderBrush="White"                            
                            Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter TargetName="border" Property="BorderBrush" Value="Black" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Resources>
        <Border BorderBrush="White" BorderThickness="2" >
                <DockPanel Canvas.Right="2" Canvas.Top="2">
                <Button Style="{StaticResource ButtonWithoutHover}" BorderThickness="3" BorderBrush="White" DockPanel.Dock="Right" Click="onButtonClick" >
                        <Button.Content>
                            <Label Content="->" Foreground="White" />
                        </Button.Content>
                    </Button>
                    <TextBox BorderThickness="0" Name="txtNumber" DockPanel.Dock="Left" >
                    </TextBox>
                </DockPanel>
            </Border>

XMAL-код реализации:

 <NumText:UserControl1 Click="UserControl1_Click" FontSize="9" Background="Red" Foreground="Yellow" Margin="160,46,206,229" />
        <NumText:UserControl1 Click="UserControl1_Click" FontSize="20" Background="Red" Foreground="Yellow" Margin="121,104,173,145" />
        <NumText:UserControl1 Background="Red" FontSize="36" Foreground="Yellow" Margin="121,180,173,69" />

е


person Sagotharan    schedule 01.11.2013    source источник


Ответы (2)


Одна вещь, которую я сделал в своей работе, — это создал ресурс Double для установки свойства FontSize. Я считаю, что это решит вашу проблему:

Сначала объявите пространство имен в файле XAML:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

Затем создайте две разные Double «переменные» с x:Key:

<sys:Double x:Key="SmallFont">10</sys:Double>
<sys:Double x:Key="LargeFont">35</sys:Double>

Наконец, установите свойство FontSize вашего элемента управления:

FontSize="{DynamicResource SmallFont}"

or

FontSize="{DynamicResource LargeFont}"

Если я вас правильно понял, я сделал именно так!
Надеюсь, это поможет.

person Tico    schedule 01.11.2013
comment
Уважаемые Помогите установить шрифты в User-control. Но как я могу дать значение при реализации в приложении. Ваш код выглядит как HOT CODE. - person Sagotharan; 01.11.2013
comment
в коде вам нужно просто установить его следующим образом: UserControlTable1.RecordListView.Resources[ListFontSize] = 16; по крайней мере, здесь это описано очень хорошо: .com/questions/3821573/ - person Danil; 01.02.2019

Вы излишне усложнили ситуацию... вам не нужны шрифты разного размера, или DockPanel, или Border. Вместо всего этого просто позвольте содержимому иметь размер UserControl, а не наоборот. Попробуйте этот упрощенный пример (для использования в Usercontrol):

<Grid Margin="5">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" Text="jagadees" BorderThickness="0" 
VerticalAlignment="Center" />
    <Button Grid.Column="1" Style="{StaticResource ButtonWithoutHover}" 
Background="Red" Foreground="White" Content="->" VerticalAlignment="Center" />
</Grid>

ОБНОВЛЕНИЕ >>>

Вся моя мысль заключалась в том, что если вы реструктурируете свой XAML, то увидите, что вам не нужно использовать разные размеры шрифта. Однако, если вы полны решимости это сделать, просто реализуйте простой класс Converter, чтобы изменить размер одного из элементов:

public class DoubleToLargerDoubleConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || value.GetType() != typeof(double)) return false;
        double amountToEnlargeBy = 0;
        if (parameter == null || double.TryParse(parameter.ToString(), out amountToEnlargeBy)) return false;
        double doubleValue = (double)value;
        return doubleValue + amountToEnlargeBy;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

Поскольку вы никогда не говорили, какой текст вы хотите увеличить, я просто предполагаю, что текст Button должен быть больше. В этом случае вы должны использовать его следующим образом:

<Label Content="->" Foreground="White" FontSize="{Binding FontSize, RelativeSource={
    RelativeSource AncestorType={x:Type Button}}, Converter={StaticResource 
    DoubleToLargerDoubleConverter}, ConverterParameter=5.0}" />

Я собираюсь предположить, что вы знаете, как использовать Converter, так что дайте мне знать, если вы этого не сделаете. Просто установите величину, на которую вы хотите увеличить размер шрифта, в свойстве Binding.ConverterParameter.

person Sheridan    schedule 01.11.2013
comment
На самом деле вы не заметили, что содержимое моей кнопки — это ярлык. Button.Content› ‹Label Content=-› Foreground=White /› ‹/Button.Content› - person Sagotharan; 05.11.2013
comment
Да, я сделал... Мне просто не нужно было использовать Label, чтобы получить тот же результат. Вы пробовали этот код? Что такого особенного в использовании там Label? - person Sheridan; 05.11.2013
comment
я пробовал ваш код без метки. но такая же проблема есть. см. мой вопрос, когда я устанавливаю размер шрифта в UserContol, и текстовое поле, и кнопка принимают этот размер. Так что иногда шрифт texbox я большой или размер шрифта кнопки большой. Поэтому я решил установить два типа размера шрифта в UserContol. - person Sagotharan; 05.11.2013