Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t通过C#代码在WPF中应用样式_C#_Wpf_Styles - Fatal编程技术网

Can';t通过C#代码在WPF中应用样式

Can';t通过C#代码在WPF中应用样式,c#,wpf,styles,C#,Wpf,Styles,我发现了问题所在,这与C#代码本身无关,但它在XAML中,问题是我在XAML中设置的默认颜色覆盖了我的样式颜色 总之,当您使用XAML设置任何属性时,它总是会在运行时覆盖C#code设置的后期样式,这对我来说似乎很奇怪,但至少对我来说是这样的。您还没有发布样式的创建,可能是缺少什么 有一个关于StackOverflow的例子,它是在代码中创建和设置样式的一个非常好的简短示例: Q:是否有人知道如何在代码隐藏中创建wpf样式,我在web或MSDN文档中找不到任何内容。我尝试过这个方法,但不起作用:

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


总之,当您使用XAML设置任何属性时,它总是会在运行时覆盖C#code设置的后期样式,这对我来说似乎很奇怪,但至少对我来说是这样的。

您还没有发布样式的创建,可能是缺少什么

有一个关于StackOverflow的例子,它是在代码中创建和设置样式的一个非常好的简短示例:

Q:是否有人知道如何在代码隐藏中创建wpf样式,我在web或MSDN文档中找不到任何内容。我尝试过这个方法,但不起作用:

A:您需要向样式中添加setter,而不是使用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);
}

你还没有发布你的创作风格,可能是缺少了什么

有一个关于StackOverflow的例子,它是在代码中创建和设置样式的一个非常好的简短示例:

Q:是否有人知道如何在代码隐藏中创建wpf样式,我在web或MSDN文档中找不到任何内容。我尝试过这个方法,但不起作用:

A:您需要向样式中添加setter,而不是使用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
        }
Style Style_Panel=新样式(typeof(Panel));
公共void Init_Style()
{
//创建样式:
#区域“创建样式”
Style_Panel.Setters.Add(newsetter())
{
Property=Panel.BackgroundProperty,
值=新的SolidColorBrush(Colors.Red)
});
添加(Style_Panel.TargetType,Style_Panel);
#端区
//应用样式:
#区域“应用样式”
List List_Visual=新列表();
List_Visual.Add(new StackPanel(){Name=“btn”});
//枚举可视化(面板主视图、列表可视化);
foreach(列表中的可视\u可视)
{
if(可视is面板)
{
面板=可视为面板;
//如果(标记(面板,“标题栏”))
//{
//}
//else if(已标记(面板)=false)
{

//panel.Background=new SolidColorBrush(Colors.Red);//我使用了您的代码并进行了少量修改以进行验证。似乎工作正常。请看:

 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
        }
Style Style_Panel=新样式(typeof(Panel));
公共void Init_Style()
{
//创建样式:
#区域“创建样式”
Style_Panel.Setters.Add(newsetter())
{
Property=Panel.BackgroundProperty,
值=新的SolidColorBrush(Colors.Red)
});
添加(Style_Panel.TargetType,Style_Panel);
#端区
//应用样式:
#区域“应用样式”
List List_Visual=新列表();
List_Visual.Add(new StackPanel(){Name=“btn”});
//枚举可视化(面板主视图、列表可视化);
foreach(列表中的可视\u可视)
{
if(可视is面板)
{
面板=可视为面板;
//如果(标记(面板,“标题栏”))
//{
//}
//else if(已标记(面板)=false)
{

//panel.Background=new SolidColorBrush(Colors.Red);//XAML代码中的默认背景色避免了应用于面板上的C#样式(至少避免了应用于默认背景的新背景色)。

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

样式应该在XAML中创建,也应该在XAML中应用。为什么要用无用的东西填充代码隐藏。尝试使用WPF的查看MVVM模式。您会注意到在窗口(或其他用户控件)中使用样式不是一个好的做法构造函数。此外,这里有一个很好的教程,它将教您如何以正确的方式创建和使用样式。:)顺便说一句,将来,您将永远不会使用C#创建样式…您将使用XAML模板(样式或其他资源)为什么使用C#而不是XAML进行样式设计?这是有原因的,但我不能在这里用500个字符的有限注释来描述原因。通常我不喜欢XAML机制,但也有很多技术原因。meorfi,感谢wpftutorial.net的建议,我已经在使用它:)样式应该在XAM中创建为什么要用无用的东西来填充代码隐藏。试着用WPF的MVVM模式来看一看。你会注意到在窗口(或其他用户控件)构造函数中使用样式不是一个好的实践。另外,这里有一个很好的教程,教你如何在正确的模式中创建和使用样式