2012-03-09 20 views
1

これは愚かな質問かもしれませんが、usercontrolのcolorプロパティを設定するには? XAMLで色がちょうどテキストフィールドであるため、どのように私は私が正しく依存関係プロパティで色を設定するにはどうすればいいですか?

<MyUserControl LabelColour="#FF747474" /> <MyUserControl LabelColour="Red"/>

をブラシを設定することができるように値を変換する必要がありますこれは私が得たどのくらいです。値はテキストとして入力されますが、それをブラシに変換する次のステップは何ですか?

private static DependencyProperty LabelColourProperty 
     = DependencyProperty.Register("LabelColour", typeof(object), typeof(MyUserControl), new PropertyMetadata(null)); 

    public object LabelColour 
    { 
     get { return GetValue(LabelColourProperty); } 
     set { SetValue(LabelColourProperty, value); LabelGrid.Background = (Brush)value; } 
    } 
+1

なぜ 'オブジェクト'型を使用しますか?なぜ、 'ブラシ'ではないのですか? – Zabavsky

+0

特に理由はありませんが、ブラシはもちろん良いです。しかし、この値をブラシに変換する方法は変わりません。テキスト値を「新しいSolidColorBrush()」などに渡すことができる有効なColorオブジェクトに変換するメソッドがありますか? – JohnCambell

+0

コードを使って遊んだあと、XAMLで動作させるにはオブジェクトが必要であるようです。 – JohnCambell

答えて

1
String xamlString = "<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Background=\"MistyRose\"/>"; 
Canvas c = (Canvas) System.Windows.Markup.XamlReader.Load(xamlString); 
SolidColorBrush mistyRoseBrush = (SolidColorBrush) c.Background; 
System.Windows.Media.Color mistyRose = mistyRoseBrush.Color; 

私は、これはあなたを助けることができると思います。

+0

ありがとう、これは美しく動作します。 – JohnCambell

1

Silverlightでは文字列をColorに変換する直接的な方法は公開されていません。最も近いのはColor.FromArgbメソッドです。 Colorを参照してください。これには、必要なものに最も近い単純なコードが含まれています(Viniciusが直接引用しているように)。

私は個人的にはプロパティタイプとしてobjectを使用せず、XamlParserで処理するようにしました(これは、人為的には人工的に行う必要があります)。

これは、それがどのように見えるべきかです:

private static DependencyProperty LabelColourProperty 
     = DependencyProperty.Register("LabelColour", typeof(Brush), typeof(MyUserControl), new PropertyMetadata(null, OnLabelColourChanged)); 

private static void OnLabelColourChanged(DependencyObject source, 
          DependencyPropertyChangedEventArgs e) 
{ 
    MyUserControl ctl = source as MyUserControl; 
    if (ctl != null) 
    { 
     ctl.LabelGrid.Background = (Brush)e.NewValue; 
    } 
} 

public Brush LabelColour 
{ 
    get { return GetValue(LabelColourProperty) as Brush; } 
    set { SetValue(LabelColourProperty, value); } 
} 

注依存関係プロパティとして実装されているプロパティのセッターに他のコードを配置することはありません。バインディング経由で値が設定されている場合(これは、最初に依存プロパティとして実装する全体の点です)、SetValueメソッドは、通常のプロパティセッターをバイパスして直接使用されます。したがって、プロパティのメタデータが提供できるonプロパティの変更されたコールバックで値の変更を行う必要がある場合は、何かを実行する必要があります。

+0

私はこれを試しましたが、XAMLでLabelColourを設定すると、これがどのように機能するのかよく分かりません。 LabelColourに値を入力すると、アプリケーションがクラッシュします。私は行方不明のものがありますか? – JohnCambell

+0

"typeof(Brush)"を "typeof(object)"に変更した後、私はそれを動作させました。結局、それはオブジェクトでなければならないと私には思われます。私はこれも答えとしてマークします。 – JohnCambell

+0

Register呼び出しの 'typeof(Brush)'が正しいですが、Getterに必要な小さな変更がありました。 – AnthonyWJones