จะเปลี่ยนขนาดตัวอักษรในการควบคุมผู้ใช้ WPF สองแบบที่แตกต่างกันได้อย่างไร

ฉันได้สร้างและใช้งาน WPf UserContol เช่น Window8 PasswordBox เมื่อฉันเปลี่ยนแบบอักษร ทั้งกล่องข้อความและปุ่มด้านในก็เปลี่ยนไป น่าเสียดายที่ขนาดตัวอักษรของปุ่มไม่เหมาะเมื่อขนาดตัวอักษรของกล่องข้อความสมบูรณ์แบบ (ดูภาพ - ปุ่มที่สองมีขนาดตัวอักษรของปุ่มที่สมบูรณ์แบบ แต่กล่องข้อความไม่มี และปุ่มที่สามยังไม่สมบูรณ์แบบ แต่กล่องข้อความมีขนาดตัวอักษรที่สมบูรณ์แบบ)

ฉันจะตั้งค่าขนาดตัวอักษรตัวควบคุมสองอันในขณะที่ใช้งานได้อย่างไร เช่นเดียวกับคุณสมบัติ Button_fontSize และ textbox_fontSize

รหัส Usercontol 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
เรียน ความช่วยเหลือในการตั้งค่าแบบอักษรในการควบคุมผู้ใช้ แต่ฉันจะให้คุณค่าในขณะที่นำไปใช้ในแอปพลิเคชันได้อย่างไร รหัสของคุณดูเหมือน HOT CODE - person Sagotharan; 01.11.2013
comment
ในโค้ดคุณจะต้องตั้งค่าดังนี้: UserControlTable1.RecordListView.Resources[ListFontSize] = 16; อย่างน้อยที่นี่มีการอธิบายไว้เป็นอย่างดี: stackoverflow .com/questions/3821573/ - person Danil; 01.02.2019

คุณทำให้สถานการณ์ซับซ้อนเกินไปโดยไม่จำเป็น... คุณไม่จำเป็นต้องใช้แบบอักษรที่มีขนาดแตกต่างกัน หรือ DockPanels หรือ Borders แทนที่จะทำเช่นนี้ ให้ปล่อยให้เนื้อหามีขนาด 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› ‹เนื้อหาฉลาก=-› พื้นหน้า=สีขาว /› ‹/Button.Content› - person Sagotharan; 05.11.2013
comment
ใช่ ฉันทำ... ฉันไม่จำเป็นต้องใช้ Label เพื่อให้ได้ผลลัพธ์เดียวกัน คุณลองใช้รหัสนี้หรือไม่? มีอะไรพิเศษเกี่ยวกับการใช้ Label ที่นั่น? - person Sheridan; 05.11.2013
comment
ใช่ ฉันลองใช้รหัสของคุณโดยไม่มีป้ายกำกับ แต่ปัญหาเดียวกันก็อยู่ที่นั่น ดูคำถามของฉันเมื่อฉันตั้งค่าขนาดตัวอักษรใน UserContol ทั้งกล่องข้อความและปุ่มจะใช้ขนาดนั้น ดังนั้นบางครั้งแบบอักษรของกล่องข้อความก็ใหญ่หรือขนาดตัวอักษรของปุ่มก็ใหญ่ ดังนั้นฉันจึงตัดสินใจตั้งค่าขนาดฟอนต์สองประเภทใน UserContol - person Sagotharan; 05.11.2013