我发现问题是什么,它与C#代码本身无关,但它在XAML中,问题是我在XAML中设置的默认颜色覆盖了我的样式颜色。
总而言之,当您通过XAML设置任何属性时,它总是覆盖运行时由C#代码设置的后续样式,这对我来说似乎很奇怪,但至少它对我有用。
答案 0 :(得分:1)
XAML代码中的默认背景颜色避免了C#的样式应用于面板(至少避免了新的Background
应用于默认代码)。
答案 1 :(得分:0)
你还没有发布你的风格的创作,也许那里缺少什么?
StackOverflow上有another similar answer,这是在代码中创建和设置样式的一个非常好的简短示例:
问:有谁知道如何在代码中创建wpf样式,我在网络或MSDN文档上找不到任何内容。我试过这个但是没有用:
答:您需要在样式中添加setter而不是使用RegisterName。 Window_Loaded事件中的以下代码将创建一个新的TextBlock样式,该样式将成为Window中所有TextBlock实例的默认样式。如果您希望在一个特定的TextBlock上显式设置它,则可以设置该控件的Style属性,而不是将样式添加到Resources字典中。
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);
}
答案 2 :(得分:0)
我使用了您的代码并进行了一些修改以进行验证。似乎工作正常。看看:
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
}