แปลงจากสีเป็นแปรง


คำตอบ:


139

นี้สำหรับColorการBrush....

แปลงไม่ได้ต้องทำแปรงใหม่ ....

SolidColorBrush brush = new SolidColorBrush( myColor );

ตอนนี้ถ้าคุณต้องการใน XAML คุณสามารถสร้างตัวแปลงค่าที่กำหนดเองและใช้ในการผูก


8
สำหรับความเข้ากันได้แบบย้อนหลังควรใช้SolidBrush( System.Drawing) ซึ่งพร้อมใช้งานตั้งแต่. NET Framework 1.1 แทนSolidColorBrush( System.Windows.Media) พร้อมใช้งานโดยเริ่มจาก. NET Framework 3.0
BillyJoe

35
Brush brush = new SolidColorBrush(color);

วิธีอื่น ๆ :

if (brush is SolidColorBrush colorBrush)
    Color color = colorBrush.Color;

หรืออะไรทำนองนั้น.

ชี้ไม่ใช่ว่าแปรงทั้งหมดเป็นสี แต่คุณสามารถเปลี่ยนสีทั้งหมดให้เป็นแปรง (SolidColor) ได้


สีเพื่อแปรง!
raiserle

@raiserle: สำหรับข้อมูลของคุณเนื้อหาคำถามเคยเป็นI want to convert from Brush to Color in c#ในขณะที่ชื่อเรื่องเป็นอีกทางหนึ่ง
HB


18

คุณสามารถใช้สิ่งนี้:

new SolidBrush(color)

โดยที่สีเป็นดังนี้:

Color.Red

หรือ

Color.FromArgb(36,97,121))

หรือ ...


2
สำหรับความเข้ากันได้แบบย้อนกลับคำตอบนี้ดีกว่าเนื่องจากSolidBrush( System.Drawing) พร้อมใช้งานตั้งแต่. NET Framework 1.1 ในขณะที่SolidColorBrush( System.Windows.Media) พร้อมใช้งานโดยเริ่มจาก. NET Framework 3.0
BillyJoe

2

ฉันเคยมีปัญหาเดียวกันมาก่อนนี่คือชั้นเรียนของฉันที่แก้ไขการแปลงสีใช้มันและสนุกกับ:

ไปเลยใช้คลาสของฉันเพื่อแปลงสีหลายสี

using System;
using System.Windows.Media;
using SDColor = System.Drawing.Color;
using SWMColor = System.Windows.Media.Color;
using SWMBrush = System.Windows.Media.Brush;

//Developed by امین امیری دربان
namespace APREndUser.CodeAssist
{
    public static class ColorHelper
    {
        public static SWMColor ToSWMColor(SDColor color) => SWMColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SDColor ToSDColor(SWMColor color) => SDColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SWMBrush ToSWMBrush(SDColor color) => (SolidColorBrush)(new BrushConverter().ConvertFrom(ToHexColor(color)));
        public static string ToHexColor(SDColor c) => "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
        public static string ToRGBColor(SDColor c) => "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
        public static Tuple<SDColor, SDColor> GetColorFromRYGGradient(double percentage)
        {
            var red = (percentage > 50 ? 1 - 2 * (percentage - 50) / 100.0 : 1.0) * 255;
            var green = (percentage > 50 ? 1.0 : 2 * percentage / 100.0) * 255;
            var blue = 0.0;
            SDColor result1 = SDColor.FromArgb((int)red, (int)green, (int)blue);
            SDColor result2 = SDColor.FromArgb((int)green, (int)red, (int)blue);
            return new Tuple<SDColor, SDColor>(result1, result2);
        }
    }

}

1

หากคุณกำลังทำงานกับแอปพลิเคชันที่มี Windows Forms และ WPF ผสมกันคุณอาจมีความยุ่งยากเพิ่มเติมในการพยายามแปลง System.Drawing.Color เป็น System.Windows.Media.Color ฉันไม่แน่ใจว่ามีวิธีที่ง่ายกว่านี้ไหม แต่ฉันทำแบบนี้:

System.Drawing.Color MyColor = System.Drawing.Color.Red;
System.Windows.Media.Color = ConvertColorType(MyColor);

System.Windows.Media.Color ConvertColorType(System.Drawing.Color color)
{
  byte AVal = color.A;
  byte RVal = color.R;
  byte GVal = color.G;
  byte BVal = color.B;

  return System.Media.Color.FromArgb(AVal, RVal, GVal, BVal);
}

จากนั้นคุณสามารถใช้หนึ่งในเทคนิคที่กล่าวถึงก่อนหน้านี้เพื่อแปลงเป็นแปรง


0

มักจะเพียงพอที่จะใช้แปรงของพี่น้องหรือผู้ปกครองตามวัตถุประสงค์และสามารถใช้งานได้ง่ายใน wpf โดยการดึงคุณสมบัติ Foreground หรือ Background

Ref: Control.Background

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.