Bagaimana cara mengubah ukuran font di dua kontrol berbeda dari kontrol pengguna WPF?

Saya telah Membuat dan Mengimplementasikan WPf UserContol seperti Window8 PasswordBox. Ketika Saya Mengubah Font, Kotak Teks dan Tombol Dalam telah Berubah. Sayangnya ukuran Font Tombol tidak cocok ketika ukuran font kotak teks sudah sempurna. (Lihat Gambar - Tombol Kedua memiliki ukuran font tombol yang sempurna, tetapi kotak teks belum. Dan Tombol ketiga belum sempurna, tetapi kotak teks memiliki ukuran font yang sempurna)

Bagaimana cara mengatur dua ukuran font Kontrol saat Implementasi? Seperti Properti Button_fontSize dan textbox_fontSize.

Kode XAML Kontrol Pengguna Saya:

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

Kode XMAL Implementasi:

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

e


person Sagotharan    schedule 01.11.2013    source sumber


Jawaban (2)


Satu hal yang telah saya lakukan dalam pekerjaan saya adalah membuat sumber daya Double untuk mengatur properti FontSize. Saya yakin ini akan menyelesaikan masalah Anda:

Pertama, deklarasikan namespace di file XAML Anda:

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

Kemudian buat dua Double "variabel" yang berbeda dengan x:Key:

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

Terakhir atur properti FontSize Kontrol Anda:

FontSize="{DynamicResource SmallFont}"

or

FontSize="{DynamicResource LargeFont}"

Jika saya memahami Anda dengan benar, inilah yang telah saya lakukan!
Semoga Membantu.

person Tico    schedule 01.11.2013
comment
Yang Terhormat Bantuannya untuk mengatur font di Kontrol pengguna. Tapi bagaimana saya bisa Memberi Nilai saat mengimplementasikan dalam aplikasi. Kode Anda terlihat seperti KODE PANAS. - person Sagotharan; 01.11.2013
comment
dalam kode Anda hanya perlu mengaturnya seperti ini: UserControlTable1.RecordListView.Resources[ListFontSize] = 16; setidaknya di sini dijelaskan dengan sangat baik: stackoverflow .com/questions/3821573/ - person Danil; 01.02.2019

Anda telah memperumit situasi secara tidak perlu... Anda tidak memerlukan ukuran font yang berbeda, atau DockPanels, atau Borders. Daripada melakukan semua ini, biarkan konten berukuran UserControl, bukan sebaliknya. Coba contoh sederhana ini (untuk menggunakan di 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>

PEMBARUAN >>>

Maksud saya adalah jika Anda merestrukturisasi XAML Anda maka Anda akan melihat bahwa Anda tidak perlu menggunakan ukuran font yang berbeda. Namun, jika Anda bertekad untuk melakukannya, implementasikan saja kelas Converter sederhana untuk mengubah ukuran salah satu elemen:

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

Karena Anda tidak pernah mengatakan teks mana yang ingin Anda lebih besar, saya hanya menduga teks Button harus lebih besar. Dalam hal ini, Anda akan menggunakannya seperti ini:

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

Saya berasumsi Anda tahu cara menggunakan Converter, jadi beri tahu saya jika Anda tidak tahu. Cukup atur besaran ukuran font yang ingin Anda perbesar di properti Binding.ConverterParameter.

person Sheridan    schedule 01.11.2013
comment
Sebenarnya Anda belum memperhatikan isi tombol saya adalah label. Button.Content› ‹Label Content=-› Latar Depan=Putih /› ‹/Button.Content› - person Sagotharan; 05.11.2013
comment
Ya, benar... Saya hanya tidak perlu menggunakan Label untuk mendapatkan hasil yang sama. Apakah Anda mencoba kode ini?. Apa istimewanya menggunakan Label di sana? - person Sheridan; 05.11.2013
comment
ya, saya mencoba kode Anda tanpa label. tapi masalah yang sama ada di sana. lihat pertanyaan saya ketika saya mengatur ukuran font di UserContol, Kotak Teks dan Tombol mengambil ukuran itu. Jadi terkadang ukuran font texbox besar atau font tombol besar. Jadi saya memutuskan untuk mengatur dua jenis ukuran font di UserContol. - person Sagotharan; 05.11.2013