سؤال

ولدي ملف التكوين حيث يمكن للمطور تحديد لون النص الذي يمر في سلسلة:

 <text value="Hello, World" color="Red"/>

وبدلا من أن عملاق بيان التبديل نظرة لجميع الألوان الممكنة، سيكون من الجميل أن مجرد استخدام الخصائص في System.Drawing.Brushes الدرجة بدلا من ذلك حتى داخليا أستطيع أن أقول شيئا مثل:

 Brush color = Brushes.Black;   // Default

 // later on...
 this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));

وفيما عدا أن القيم في فرشاة / فرش ليست تتضمن التعدادات. لذلك يعطي Enum.Parse لي أي فرح. اقتراحات؟

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

المحلول

وخلاصة جميع الأجوبة السابقة، طرق مختلفة لتحويل سلسلة إلى اللون أو الفرشاة:

// best, using Color's static method
Color red1 = Color.FromName("Red");

// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString("Red");

// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty("Red").GetValue(null, null);

// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("Red");

نصائح أخرى

وسلسلة لفرشاة:

myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;

وهذا حالتي هنا!

ويمكن تعريف فرشاة مثل هذا

Brush myBrush = new SolidBrush(Color.FromName("Red"));

وD'اه. بعد فترة من الوقت للنظر وجدت:

 Color.FromName(a.Value)

وبعد ضرب "آخر". من هناك انها خطوة قصيرة إلى:

 color = new SolidBrush(Color.FromName(a.Value));

وسأترك هذا السؤال هنا للآخرين ....

هل يمكن استخدام انعكاس لذلك:

Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);

وبطبيعة الحال، فأنت تريد بعض التدقيق معالجة الأخطاء / المدى إذا كانت السلسلة خاطئة.

وأوافق على أن استخدام TypeConverters هي أفضل طريقة:

 Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
 return new Brush(c);

وحاول استخدام TypeConverter. مثال:

var tc = TypeDescriptor.GetConverter(typeof(Brush));

وثمة بديل آخر هو استخدام التفكير، ويذهب أكثر الخصائص في SystemBrushes.

إذا كنت تريد، يمكنك توسيع هذا حتى أكثر، وتمكينهم من تحديد قيم R، G والقيم B. ثم كنت مجرد دعوة Color.FromArgb (الباحث ص، ز الباحث، الباحث ب)؛

ويمكنك استخدام النظام .Drawing.KnownColor التعداد. وهي تحدد جميع الألوان النظام المعروف.

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