في WPF، ما هي أفضل طريقة لإنشاء أزرار شريط الأدوات بحيث يتم تغيير حجم الصور بشكل صحيح؟

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

سؤال

على وجه التحديد، أتطلع إلى استخدام صور png بحجم 16*16 و32 بت المضمنة في VS2008ImageLibrary.لقد حاولت يدويًا ضبط سمات الارتفاع والعرض للصورة، وضبط الهوامش والحشوة، وضبط خيارات التمدد والعرض.أدت جميع محاولاتي لإنشاء أزرار شريط الأدوات إما إلى تغيير الحجم بشكل غير صحيح (أيقونات ضبابية)، أو اقتطاع الصف السفلي من وحدات البكسل الموجودة على الأيقونة، أو حجم زر شريط الأدوات بشكل غير صحيح - ناهيك عن اختفاء الرموز المذكورة بالفعل هنا.هل وجد أي شخص أفضل طريقة لإنشاء أزرار شريط الأدوات القياسية بنمط VisualStudio/WinForms والتي يتم عرضها بشكل صحيح في WPF؟

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

المحلول

أولا، تغيير دقة الصورة ل96DPI، وهذا يمكن القيام به مع Paint.net مجانا ( HTTP: // شبكة الاتصالات العالمية. getpaint.net ) عن طريق فتح الملف، اختيار -الصورة> قماش الحجم من القائمة وضبط "القرار" إلى 96 والادخار.

وإذا كان هذا لا يساعد يمكنك بعد ذلك استخدام الحل كتبت عن في بلدي بلوق هنا <لأ href = "http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images -في-wpf.aspx "يختلط =" نوفولو noreferrer "> http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-wpf.aspx

نصائح أخرى

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

والأخبار السيئة هي التي ربما تحتاج إلى إعادة رسم كل ما تبذلونه من الرموز. هل يمكن القيام بذلك باستخدام MS التعبير مزيج (انها قادرة على حفظ الصور كما رسمت .xaml) أو يمكنك جعلها في منطقتنا مع محرر نصوص. لكنني أفضل Border.Background بدلا من Image.Source لوضع رمز، وهذا يتيح لي الفرصة لوضع النص فوق الصورة. هذا من شأنه أن ننظر samething مثل ما يلي:

<Window.Resources>
   <ResourceDictionary Source="Resources/Icons.xaml"/>
</Window.Resources>
<!--
...
-->
<Button>
   <Border Background="{StaticResource IconName}" Height="16" Width="16" />
</Button>

وأفضل الحل أستطيع الخروج مع هذا:

<Image x:Key="TB_NewIcon" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
...
<Button Command="ApplicationCommands.New" Content="{StaticResource TB_NewIcon}" Padding="2,2,2,1"/>

وأو بدلا من ذلك:

<BitmapImage x:Key="TB_NewIcon" UriSource="Toolbar Images\NewDocumentHS.png"/>
...
<Button Command="ApplicationCommands.New" Padding="2,2,2,1">
    <Image Source="{StaticResource TB_NewIcon}" Height="16" Width="16" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</Button>

لعلامة زر، هناك حاجة إلى السمة الحشو لضمان عدم اقتطاع الصورة على ارتفاع 15 بكسل، وأن الزر لا تغيير حجمها لتناسب الصورة. بدلا من ذلك، فإننا لا يمكن تحديد الحشو = "1"، ولكن بعد ذلك لا بد لنا من تعيين يدويا الارتفاع = "21" والعرض = "22" لضمان عدم تغيير حجم زر لتناسب صورة
على علامة التبويب الصور، هناك حاجة إلى الطول والعرض للتأكد من أن الصورة لا تمدد. كلاهما يحتاج SnapsToDevicePixels وRenderOptions.BitMapScalingMode لضمان أنه لا يوجد وضوح. أنا لا نستطيع أن نعد هذا سوف تعمل بشكل جيد لجميع القرارات.

ملحوظة: عن رمز NewDocumentHS.png، واحد الذي يتسبب في معظم القضايا، كما أنه يستغرق فترة تصل كامل 16 بكسل للارتفاع، قد ترغب في ضبط الحشو ل"1،1،3،2"، وذلك أن الجزء السفلي بمحاذاة أكثر صحيح مع الرموز الأخرى.

قد ترغب في التفكير في تجربة عقار جديد متاح الآن فيه WPF4.اترك ال RenderOptions.BitmapScalingMode ل جودة عالية أو لا تعلن ذلك.

على العنصر الجذر الخاص بك (أينافذتك الرئيسية) أضف هذه الخاصية: UseLayoutRounding="True".

لقد قامت إحدى الخصائص التي كانت متوفرة سابقًا في Silverlight فقط بإصلاح جميع مشاكل تغيير حجم الصور النقطية.:)

يرجى الملاحظة - يمكن أن يكون لبعض التأثيرات التخطيطية في التصميم الدقيق:

  • عرض و/أو ارتفاع العناصر قد يزيد أو يتقلص بمقدار 1 بكسل على الأكثر

  • يمكن أن يتحرك موضع الكائن بمقدار 1 بكسل على الأكثر

  • يمكن أن تكون العناصر المتمركزة رأسياً أو أفقياً خارج الوسط بنسبة 1 بكسل على الأكثر

مزيد من المعلومات وجدت هنا: http://blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx

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