問題が何であるかを発見しました。C#コード自体とは関係ありませんが、代わりにXAMLにあります。問題は、XAMLで設定したデフォルトの色がスタイルの色を上書きしていたことです。
したがって、結論として、XAMLでプロパティを設定すると、実行時にC#コードで設定された後のスタイルが常に上書きされます。これは私には奇妙に思えますが、少なくともそれが私にとってはうまくいきました。
XAMLコードのデフォルトの背景色は、パネルに適用されるC#のスタイルを回避しました(少なくともBackground
、デフォルトのスタイルに適用される新しいスタイルを回避しました)。
あなたは自分のスタイルの作成を投稿していません、多分何かがそこに欠けていますか?
StackOverflowにも同様の答えがあります。これは、コードでスタイルを作成および設定する非常に優れた短い例です。
Q:コードビハインドでwpfスタイルを作成する方法を知っている人はいますか?WebまたはMSDNドキュメントで何も見つかりません。私はこれを試しましたが、機能していません:
A: RegisterNameを使用するのではなく、スタイルにセッターを追加する必要があります。次のコードは、Window_Loadedイベントで、ウィンドウ内のTextBlockのすべてのインスタンスのデフォルトになる新しいTextBlockスタイルを作成します。特定のTextBlockに明示的に設定する場合は、リソースディクショナリにスタイルを追加するのではなく、そのコントロールのStyleプロパティを設定できます。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Style style = new Style(typeof (TextBlock));
style.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Green));
style.Setters.Add(new Setter(TextBlock.TextProperty, "Green"));
Resources.Add(typeof (TextBlock), style);
}
私はあなたのコードを使用し、検証のために少し変更しました。正常に動作しているようです。見てください:
Style Style_Panel = new Style(typeof(Panel));
public void Init_Style()
{
// Create Styles :
#region "Create Styles"
Style_Panel.Setters.Add(new Setter()
{
Property = Panel.BackgroundProperty,
Value = new SolidColorBrush(Colors.Red)
});
Resources.Add(Style_Panel.TargetType, Style_Panel);
#endregion
// Apply Styles :
#region "Apply Styles"
List<Visual> List_Visual = new List<Visual>();
List_Visual.Add(new StackPanel() { Name = "btn" });
//Enum_Visual(Panel_Main, List_Visual);
foreach (Visual visual in List_Visual)
{
if (visual is Panel)
{
Panel panel = visual as Panel;
//if (Tagged(panel, "titlebar"))
//{
//}
//else if (Tagged(panel) == false)
{
// panel.Background = new SolidColorBrush( Colors.Red ); // <- WORKS .
panel.Style = Style_Panel; // <- DOES NOT WORKS !
}
}
}
#endregion
}