يتم عرض WPF بشكل مختلف على نظام التشغيل Windows XP مقابل نظام التشغيل Windows 7

StackOverflow https://stackoverflow.com/questions/1605834

سؤال

لماذا يتم عرض WPF بشكل مختلف على نظام التشغيل Windows XP مقارنةً بنظام التشغيل Windows 7؟

أنا أستخدم .NET SP1 على كلا الجهازين.

يشبه تخطيطي هذه النافذة التي لا تحتوي على شريط أدوات وتم ضبطها لتكبيرها بحيث تناسب الشاشة بأكملها.

ضمن ذلك، لدي مجموعة Viewbox لاستخدام التمدد:الموحدة، وتحت ذلك لدي LayoutRoot.

وبهذه الطريقة كنت أتمنى الحصول على نفس التنسيق على جميع أجهزة الكمبيوتر، ولكن يبدو أنه لا يتم عرضه بنفس الشكل تمامًا على نظام التشغيل Windows XP.بعض العناصر أصغر قليلاً ولا يبدو التصميم رائعًا.

لقد حاولت تغيير القرار الخاص بي على جهاز الكمبيوتر الذي يعمل بنظام التشغيل Windows 7 إلى نفس جهاز الكمبيوتر الذي يعمل بنظام التشغيل Windows XP، ويحتفظ بالتخطيط كما هو من المفترض.

ويستخدم كلا الجهازين 96 نقطة في البوصة.

ويندوز إكس بي

ويندوز 7

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

المحلول

لي خبرة:

لست متأكدًا مما إذا كانت هذه هي المشكلة، فقد لاحظت أن Windows 7 يستخدم تسريع الأجهزة لرسم تطبيق WPF.نظام التشغيل Windows XP لا يفعل ذلك.

يمكنك التحقق مما إذا كان هذا هو الحال باستخدام شيء مثل هذا:

public partial class App
{
    public static int Tier { get { return RenderCapability.Tier >> 16; } }

    static App()
    {
        Console.Out.WriteLine("Render Tier: {0}", Tier);
    }
}

يجب أن ترجع طبقة العرض الخاصة بك 2 إذا كانت تستخدم رسمًا سريعًا للأجهزة بالكامل.0 = برنامج، 1 = شيء في المنتصف إذا خمنت

نصائح أخرى

استغرق الأمر مني حوالي ثلاث ساعات لأكتشف ذلك أخيرًا - بعد الكثير من العمل البوليسي، ولكنه الآن أصبح مثاليًا للبكسل!

يبدو أن WPF على نظام التشغيل Windows XP وWPF على نظام التشغيل Windows 7 ليس لهما خط افتراضي مختلف فقط وجوه وكذلك الخط الافتراضي الأحجام.

  • واجهت مشكلة حيث تم عرض الخطوط بشكل مختلف على نظام التشغيل Windows XP عما كانت عليه في نظام التشغيل Windows 7.لقد كان الأمر بالغ الأهمية نظرًا لأن الإخراج النهائي كان للطابعة، ويجب أن يكونا متطابقين.ظهر في البداية أن المشكلة كانت في اختلاف تباعد الأسطر.
  • نعم - تم تثبيت نفس الخط بالضبط على نظام التشغيل Windows XP الذي كنت أستخدمه على نظام التشغيل Windows 7
  • نعم - لقد جربت خطًا عامًا جدًا (Arial) وما زلت أواجه نفس المشكلات.
  • نعم - نفس DPI على كلا الجهازين.
  • نعم - نفس النتيجة سواء في جهاز VM (وضع Windows XP) أو على جهاز حقيقي يعمل بنظام Windows XP.

اكتشفت أخيرًا أن الخطوط التي كنت أحدد فيها حجمًا صريحًا بدت متطابقة على نظام التشغيل Windows XP، وأن الخطوط التي لم أحدد فيها حجمًا صريحًا كانت مختلفة فقط.

إذن هذه هي الطريقة التي أصلحتها في ملفي MainWindow.xaml - مع ContentControl لتعيين الحجم الافتراضي:

<Grid x:Name="LayoutRoot" Background="#FFDEDEDE" UseLayoutRounding="True">
    <ContentControl FontFamily="Segoe UI" FontSize="12">
         ... window contents ...
    </ContentControl>
</Grid>

ملحوظة: إذا كنت تستخدم يمزج قد تحتاج للدخول FontSize="12" باليد.إذا قمت بتحديده من مصمم الخصائص فسوف يقوم بحذفه، لأنه يعتقد أن الرقم 12 هو الإعداد الافتراضي بالفعل!

كما قلت، كانت وجهتي هي الطابعة - لذلك كان علي أن أفعل الشيء نفسه بالنسبة لعنصر التحكم الذي تتم طباعته.

في أي مكان آخر يمكنني تعيين حجم الخط الافتراضي هذا؟على أي حال، لدي الآن عرض مثالي للبكسل على نظامي التشغيل Windows XP وWindows 7، ويختلفان فقط من خلال الاختلافات الواضحة في مقاومة التعرج.

ملحوظة: UseLayoutRounding ليس جزءًا من الحل الخاص بي - ولكني أستخدمه دائمًا في التحكم الجذري أيضًا.

الخطوط الافتراضية مختلفة

اصنع زر WPF

<Button x:Name="button" Width="100" Height="25" Content="Button" Click="Button_Click"/>

والكود خلف:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string msg = string.Format("Number of fonts: {1}{0}Font Family: {2}{0}Font Size: {3}",
        Environment.NewLine,
        button.FontFamily.FamilyNames.Values.Count.ToString(),
        button.FontFamily.FamilyNames.Values.First().ToString(),
        button.FontSize.ToString());

    MessageBox.Show(msg);
}

قم بتشغيل هذا على كل نظام تشغيل وسترى أن الخطوط الافتراضية لنظامي XP وWindows7 مختلفة.

الخط الافتراضي لنظام XP هو "Tahoma" بحجم 11

الخط الافتراضي لنظام التشغيل Windows 7 هو حجم "Segoe UI" 12

تحتوي الإصدارات المختلفة من Windows على خطوط افتراضية مختلفة (أيضًا إصدارات مختلفة من نفس الخطوط) ومحركات عرض خطوط مختلفة - ونتيجة لذلك يختلف حجم النص بين الأنظمة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top