سؤال

أقوم بإنشاء تطبيق WPF وأرغب في معرفة أفضل طريقة لتتمكن من تغيير حجم الخط لكل عنصر في UI. هل أقوم بإنشاء قاموس مورد وإعداد أنماط لتعيين حجم الخط لجميع عناصر التحكم التي أستخدمها؟

ما هو افضل نشاط؟

هل كانت مفيدة؟

المحلول

سأفعل ذلك بهذه الطريقة:

<Window.Resources>
        <Style TargetType="{x:Type Control}" x:Key="baseStyle">
            <Setter Property="FontSize" Value="100" />
        </Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style>
        <!-- ComboBox, RadioButton, CheckBox, etc... -->
    </Window.Resources>

بهذه الطريقة، إذا كنت أرغب في تغيير جميع عناصر التحكم، فسيضطر فقط إلى تغيير أسلوب "الأسمام"، والباقي قد يرث فقط منه. (هذا هو ملكية القائمة على ما هي، يمكنك أيضا تمديد النمط الأساسي إذا قمت بإنشاء مجموعة أخرى داخل الأسلوب الموروث)

نصائح أخرى

FontsizeProperty موروث من التحكم الأصل. لذلك تحتاج فقط إلى تغيير fontsize من النافذة الرئيسية الخاصة بك.

إذا كنت لا تحتاج إلى سلوك ديناميكي، فينبغي أن يعمل هذا:

أضف أسلوبا للنافذة إلى الموارد الخاصة بك

<Style TargetType="{x:Type Window}">
     <Setter Property="FontSize" Value="15" />
</Style>

قم بتطبيق النمط على النموذج الرئيسي الخاص بك (لن يتم تطبيق ضمنية لأن النوع المشتق)

 Style = (Style)FindResource(typeof (Window));

خيار آخر هو تحديد FontFamily و FontSize كموارد.

<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>

بهذه الطريقة يمكنك استخدامها في setters الخاص بك.

<Window> لديه fontsize الخاصية.

لذلك يمكنك تعيين FONTSIZE المطلوب في العنصر إذا كنت ترغب في تغيير FONTSIZE في جميع العناصر داخل تلك النافذة.

<Window FontSize="12">

</Window>
Application.Current.MainWindow.FontSize = _appBodyFontSize;

بهذه الطريقة يمكنك تغيير حجم الخط في وقت التشغيل أيضا.

TextElement.FontSize هو خاصية ميراث، مما يعني أنه يمكنك ببساطة ضبط حجم الخط في عنصر الجذر، وسيستخدم جميع عناصر الأطفال هذا الحجم (طالما أنك لا تغيرها يدويا)

بالنسبة لأي أساليب في WPF، يجب أن يكون لديك قاموس مستورد منفصل يحتوي على أنماط لتطبيقك.

إذا كنت ترغب في الحصول على حجم خط واحد تم إعادة استخدامه طوال التطبيق، فما عليك سوى إنشاء نمط لحجم الخط. يمكنك إما أن تعطيه اسم / مفتاح فريد من نوعه للاستخدام بشكل صريح أو يمكنك تعيين هدف TARGETYPE الذي ستجاوزه عبر التطبيق.

مفتاح صريح:

<Style
    x:Key="MyFontSize"
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<Control
    Style="{StaticResource MyFontSize}" />

* ملاحظة يمكن استخدام هذا النمط مع عناصر التحكم التي تحتوي على contentpresenters

لجميع TextBlocks في التطبيق:

<Style
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<TextBlock
        Text="This text will be size 10" />

إذا كنت بحاجة إلى تغيير FONTSIZE GOULTSIZE العالمي، فلا يتم تطبيقه مرة واحدة (XAML) مرة واحدة لجميع النوافذ الخاصة بك، يمكنك القيام به:

TextElement.FontSizeProperty.OverrideMetadata(
            typeof(TextElement),
            new FrameworkPropertyMetadata(16.0));

        TextBlock.FontSizeProperty.OverrideMetadata(
            typeof(TextBlock),
            new FrameworkPropertyMetadata(16.0));

يتم تطبيق هذه القيم على أي TEXTBlock وملصقات وتقريب أي نص تقريبا في أي نوافذ، في حين أنها لا تحتوي على تحديد فونتيز واضح. ولكن هذا لا يؤثر على مربع النص، عليك كتابة رمز مشابه لذلك أو أي عناصر تحكم خاصة أخرى.

لتغيير حجم الخط ديناميكيا على مستوى العالم باستخدام Ctrl-MouseWheel:

XAML:

<Window Name="MainWindow" ... PreviewMouseWheel="MainWindow_PreviewMouseWheel">

رمز وراء:

private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)
    {
        if (e.Delta > 0)
            ++mainCtrl.FontSize;
        if (e.Delta < 0 && mainCtrl.FontSize > 1)
             --mainCtrl.FontSize;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top