1

我发现了问题所在,它与 C# 代码本身无关,而是在 XAML 中,问题是我在 XAML 中设置的默认颜色覆盖了我的样式颜色。

因此,总而言之,当您通过 XAML 设置任何属性时,它总是会在运行时覆盖由 C# 代码设置的后续样式,这对我来说似乎很奇怪,但至少这对我来说是这样的。

4

3 回答 3

1

XAML 代码中的默认背景颜色避免了在面板上应用 C# 的样式(至少避免了将新样式应用于默认样式Background)。

于 2013-02-22T07:43:57.423 回答
0

您还没有发布您的风格创作,也许那里缺少一些东西?

StackOverflow 上有另一个类似的答案,这是在代码中创建和设置样式的一个非常好的简短示例:

问:有谁知道如何在后面的代码中创建 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);
}
于 2013-02-22T07:00:47.723 回答
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
        }
于 2013-02-22T07:28:16.763 回答