none
WPF 色名からcolorクラスへの変換 RRS feed

  • 質問

  • WPFアプリケーションを作成していますが、色名からSystem.Windows.Media.Colorクラスに色情報(RGB)を入れる方法が分かりません。

    Dim c As System.Windows.Media.Color
            c = ColorTranslator.FromHtml("Red")

    ↑この様なことをしたいのですが、ColorTranslator.FromHtmlはWPFで使用できないため、コンパイルできません。

    WPFでColorTranslator.FromHtml()と同様のことをするには、どうしたら良いのでしょうか。

    無理やりWPFとwindows formを混在させて回避するという方法は、やめて下さい。

          
    • 移動 星 睦美 2016年2月25日 7:43 Visual Basic から
    2016年2月25日 7:38

回答

  • 以前の投稿でも書きましたが、System.Drawing.dllはWinFormからは独立していますし、無理矢理でも何でもないですよ?

    案1:System.Windows.Media.ColorConverterConvertFromStringを使用する。変換できる色についてのドキュメントがないようなので、厳密性は不明。#rgbなどの書式からの変換も行われる。

    案2:Colors クラスの解説によるとこれらのプロパティはIEの色名と一致するそうなので、GetType(Colors)からGetPropertiesでプロパティの一覧を取得し、名前が一致する物を探して、そのPropertyInfoからGetValueでColorインスタンスを取得する。

    • 回答としてマーク huahi11112 2016年2月26日 3:32
    2016年2月25日 8:05
  • こんにちは。

    エラー 1 非共有メンバーを参照するには、オブジェクト参照が必要です。 というエラーが出てコンパイルできません。

    これはColorConverter.ConvertFromStringで発生しているエラーですか?
    通常であれば発生しないです。

    なので再現を取るためのコードを追加で提示してください。

    (追記)
    独自でColorConverterクラスを作成していないですよね?
    試しに以下のように名前空間を明示してみてください。

    c = CType(System.Windows.Media.ColorConverter.ConvertFromString("DarkGreen"), System.Windows.Media.Color)

    2016年2月26日 1:01
    モデレータ

すべての返信

  • こちらのサイトは参考になりますでしょうか?

    http://ooltcloud.expressweb.jp/201404/article_15223230.html

    #「ColorTranslator.FromHtml "WPF" VB.NET」で検索

    2016年2月25日 8:01
  • 以前の投稿でも書きましたが、System.Drawing.dllはWinFormからは独立していますし、無理矢理でも何でもないですよ?

    案1:System.Windows.Media.ColorConverterConvertFromStringを使用する。変換できる色についてのドキュメントがないようなので、厳密性は不明。#rgbなどの書式からの変換も行われる。

    案2:Colors クラスの解説によるとこれらのプロパティはIEの色名と一致するそうなので、GetType(Colors)からGetPropertiesでプロパティの一覧を取得し、名前が一致する物を探して、そのPropertyInfoからGetValueでColorインスタンスを取得する。

    • 回答としてマーク huahi11112 2016年2月26日 3:32
    2016年2月25日 8:05
  • System.Windows.Media.ColorConverterConvertFromStringを使用する。変換できる色についてのドキュメントがないようなので、厳密性は不明。#rgbなどの書式からの変換も行われる。
    undocumentedながら、System.Windows.Media.KnownColorで定義されている色名を解釈してくれるそうです。
    2016年2月25日 8:48
  • リンク先を見て下のようなコードを書いたのですが、

    c = CType(ColorConverter.ConvertFromString("DarkGreen"), System.Windows.Media.Color)

    エラー    1    非共有メンバーを参照するには、オブジェクト参照が必要です。   というエラーが出てコンパイルできません。

    エラーの消し方が分かりません。御教授お願いします。

    2016年2月25日 22:54
  • こんにちは。

    エラー 1 非共有メンバーを参照するには、オブジェクト参照が必要です。 というエラーが出てコンパイルできません。

    これはColorConverter.ConvertFromStringで発生しているエラーですか?
    通常であれば発生しないです。

    なので再現を取るためのコードを追加で提示してください。

    (追記)
    独自でColorConverterクラスを作成していないですよね?
    試しに以下のように名前空間を明示してみてください。

    c = CType(System.Windows.Media.ColorConverter.ConvertFromString("DarkGreen"), System.Windows.Media.Color)

    2016年2月26日 1:01
    モデレータ
  • クラスライブラリのプロジェクトでしょうか?

    c = CType(New ColorConverter().ConvertFromString("DarkGreen"), System.Windows.Media.Color)

    としてどうでしょうか?

    エラーの内容の詳細はについては、こちらの投稿が参考になるかと思います。

    2016年2月26日 1:01
  • おそらく、System.Drawing.ColorConverterになっているからですね。
    System.Windows.Media.ColorConverterの方を使って下さい。

    「非共有メンバーを参照するには、オブジェクト参照が必要です。」は、ちょっとわかりにくいメッセージですが、非共有メンバーとはインスタンスメンバーのことです。System.Drawing.ColorConverter.ConvertFromStringはインスタンスメンバーなので、System.Drawing.ColorConverterはインスタンスでなければなりません。
    一方、System.Windows.Media.ColorConverter.ConvertFromStringは静的メンバー(クラスメンバー)なので、ColorConverterにインスタンスは必要ありません。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年2月26日 1:02
    モデレータ
  • Tak1waさんの、この方法で解決しました!

    hongliangさんが案1:として提案して下さっていましたが、厳密性は不明と書かれていたので不安になり試しませんでした。

    御回答いただいた皆さん、どうもありがとうございました。お手数をお掛けしました。

    ネットでWPFプログラミング関係の情報を漁っても、Windows Formの記述等が輻輳していて、どれが正しいのか分からないんですよ。

    2016年2月26日 3:31