私はWPFの完全な初心者です。
現在、エラーメッセージ用のラベル、テキストボックス、テキストブロックを含む「LabeledTextbox」と呼ばれるフォーム要素のユーザーコントロールを作成しています。
使用しているコードがエラーメッセージを追加するとき、テキストボックスの境界線を赤にしたいです。ただし、エラーメッセージが削除されたら、テキストボックスのデフォルトの境界線の色に戻したいと思います。これを行うには非常に簡単な方法があるに違いないと思います。
私のコード:
(パブリック部分クラスLabeledTextbox:UserControl)
public string ErrorMessage
{
set
{
if (string.IsNullOrEmpty(value))
{
_textbox.BorderBrush = Brushes.Black; //How do I revert to the original color in the most elegant way?
}
else
{
_textbox.BorderBrush = Brushes.Red;
}
_errorMessage.Text = value;
}
}
あなたが使うことができます
_textBox.ClearValue(TextBox.BorderBrushProperty);
これにより、直接割り当てられた値が削除され、スタイルまたはテンプレートで定義された値に戻ります。
クラスからデフォルトの色を取得できますSystemColors
これがすべてのシステムカラーのリストです: http://msdn.Microsoft.com/de-de/library/system.windows .systemcolors.aspx
クライアント領域のデフォルト背景色:
_textbox.Background = SystemColors.WindowBrush;
クライアント領域内のデフォルトテキストの色:
_textbox.SystemColors.WindowTextBrush
私はパーティーに遅れるかもしれませんが、将来の読者のために、この目的のために_Button.BackgroundProperty.DefaultMetadata.DefaultValue
_を使用することもできます。これは、コンバーターを使用しているときに特に役立ちます。コンバーターを使用する必要がある場合は、値を返すであるため、ClearValue()
呼び出しを使用できません。
デフォルト設定を保存するだけです。ここにコードの例があります。
System.Windows.Media.Brush save;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//Store the default background
save = testButton.Background;
}
private void ChangeBackground(){
testButton.Background = Brushes.Red;
}
private void restoreDefaultBackground(){
//Restore default Backgroundcolor
testButton.Background = save;
}
これは機能しますか? ClearValueメソッドを使用するよりも黒に設定する方が適切です
public string ErrorMessage
{
set
{
if (string.IsNullOrEmpty(value))
{
_textbox.Background = Brushes.Black;
}
else
{
_textbox.Background = Brushes.Red;
}
_errorMessage.Text = value;
}
}