При использовании WinForms ColorDialog в WPF выдается ошибка: недопустимый тип параметра «Цвет» для свойства форматирования «Фон» - PullRequest
0 голосов
/ 08 июля 2019

На этот вопрос ответили онлайн, и я пытаюсь следовать этим ответам, но все еще получаю следующую ошибку. Вопрос : Что я могу сделать не так и как мы можем решить эту проблему?

ПРИМЕЧАНИЕ:

  1. Я использую ColorDialog Class из Windows Form для реализации аналогичной функциональности в wpf
  2. Я не хочу использовать сторонний инструмент (WPFToolKit и т. д.).

Соответствующий код WPF:

Using ....
using System.Windows.Forms; //for winforms' ColorDialog
......
private void BtnTest_Click(object sender, RoutedEventArgs e)
{
   ColorDialog MyDialog = new ColorDialog(); //from Winform
   MyDialog.AllowFullOpen = false;
   MyDialog.ShowHelp = true;

if (MyDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    try
    {
        TextSelection textSelection = mainRTB.Selection;
        if (!textSelection.IsEmpty)
        {
             //Use the WPF System.Windows.Media.Brushes class instead of System.Drawing.Brushes from WinForms:
            textSelection.ApplyPropertyValue(TextElement.BackgroundProperty, ColorHelper.ToSWMColor(MyDialog.Color)); //error occurs at this line
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }
}
}

ColorHelper Class (я создал в том же проекте):

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

namespace ColorDialog_for_WPF
{
    public static class ColorHelper
    {
        public static SWMColor ToSWMColor(this SDColor color) => SWMColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SDColor ToSDColor(this SWMColor color) => SDColor.FromArgb(color.A, color.R, color.G, color.B);
    }
}

Ошибка :

Недопустимый тип параметра «Цвет» для свойства форматирования «Фон»

1 Ответ

3 голосов
/ 08 июля 2019

Свойство Background имеет тип Brush, а не Color.

Вам необходимо создать SolidColorBrush.

...