Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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
C# 样式化WPF-代码中的材质设计分组框_C#_Wpf_Xaml_Groupbox_Material Design In Xaml - Fatal编程技术网

C# 样式化WPF-代码中的材质设计分组框

C# 样式化WPF-代码中的材质设计分组框,c#,wpf,xaml,groupbox,material-design-in-xaml,C#,Wpf,Xaml,Groupbox,Material Design In Xaml,经过一番探索/尝试和错误,我必须求助于社区的帮助。我正在使用MaterialDesign框架开发一个WPF应用程序,该框架在我的App.xaml中定义了自定义颜色,如下所示: <Application.Resources> <ResourceDictionary> <!-- primary --> <SolidColorBrush x:Key="PrimaryHueLightBrush" C

经过一番探索/尝试和错误,我必须求助于社区的帮助。我正在使用MaterialDesign框架开发一个WPF应用程序,该框架在我的App.xaml中定义了自定义颜色,如下所示:

<Application.Resources>
        <ResourceDictionary>
            <!-- primary -->
            <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="#033059"/><!--5c5b5e-->
            <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="#FFFFFF"/>
            <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="DarkRed"/> <!--6134d9-->
            <SolidColorBrush x:Key="PrimaryHueMidForegroundBrush" Color="#FFFFFF"/>
            <SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="#48545e"/> <!--4D1DCF-->
            <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#FFFFFF"/>
            <!-- accent -->
            <SolidColorBrush x:Key="SecondaryAccentBrush" Color="#1266a7"/> <!--5c5b5e-->
            <SolidColorBrush x:Key="SecondaryAccentForegroundBrush" Color="#FFFFFF"/>

            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
                <!--<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Red.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Blue.xaml" />-->
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Button.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.GroupBox.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.DatePicker.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Calendar.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.CheckBox.xaml" />


            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

需要以编程方式(在代码隐藏中)呈现某些控件,其中一个控件是GroupBox。此GroupBox渲染得很好,但使用PrimaryHueMidBrush中定义的颜色设置样式。我想完成的是为GroupBox分配另一个(SecondaryAccentBrush)。在XAML中,这可以通过如下方式实现:

<Border BorderBrush="{DynamicResource SecondaryAccentBrush}" BorderThickness="2" Padding="10" Height="50" Width="300">
        <TextBlock Text="Material Design Test" />
</Border>

var childDef = new GroupBox()
            {
                Header = "Deficiencies",
                HorizontalAlignment = HorizontalAlignment.Right,
                VerticalAlignment = VerticalAlignment.Top,


                //Background = new SolidColorBrush(Colors.Red)
                //Foreground = new SolidColorBrush(Colors.Red),
                //OverridesDefaultStyle = true
                //Background = Brushes.DarkRed,
                //BorderThickness = new Thickness(1),
                //BorderBrush = new SolidColorBrush(Colors.Red)
            };

            //childDef.SetResourceReference(Control.BorderBrushProperty, "PrimaryHueDarkBrush");
            //childDef.SetResourceReference(Control., materialDesign:ColorZoneAssist.Mode="Accent");

var childDef=newgroupbox()
{
Header=“缺陷”,
水平对齐=水平对齐。对,
垂直对齐=垂直对齐。顶部,
//背景=新的SolidColorBrush(Colors.Red)
//前景=新的SolidColorBrush(颜色为红色),
//OverridesDefaultStyle=true
//背景=画笔.DarkRed,
//边界厚度=新厚度(1),
//BorderBrush=新的SolidColorBrush(Colors.Red)
};
//childDef.SetResourceReference(Control.BorderBrushProperty,“PrimaryHueDarkBrush”);
//childDef.SetResourceReference(控件,材质设计:colorZoneAsist.Mode=“重音”);
问题是,我不知道如何通过代码实现这一点。我尝试的东西似乎都不管用。我不知道如何越过边界

任何帮助都将不胜感激

提前感谢

您可以使用代码隐藏:

childDef.BorderBrush = (Brush) Application.Current.Resources["SecondaryAccentBrush"];
例如,访问App.xaml中定义的“SecondaryAccentBrush”笔刷:

<Application.Resources>
     <ResourceDictionary>
         <SolidColorBrush x:Key="SecondaryAccentBrush" Color="#1266a7"/>
    </ResourceDictionary>
</Application.Resources>
结果如下:

您可以从代码隐藏中使用:

childDef.BorderBrush = (Brush) Application.Current.Resources["SecondaryAccentBrush"];
例如,访问App.xaml中定义的“SecondaryAccentBrush”笔刷:

<Application.Resources>
     <ResourceDictionary>
         <SolidColorBrush x:Key="SecondaryAccentBrush" Color="#1266a7"/>
    </ResourceDictionary>
</Application.Resources>
结果如下:


为了进一步阐述Mikael的答案,当你不从事材料设计时,它的效果很好,我能够得出以下结论:

childDef.Style = Application.Current.FindResource("MaterialDesignGroupBox") as Style;

我仍在寻找一种在代码隐藏中应用MaterialDesign:ColorZoneAsist.Mode=“Accent”的方法,因为这似乎是应用除应用程序的主要MaterialDesign颜色以外的其他颜色的唯一方法。

要扩展Mikael的答案,当您不使用Material Design时,它可以正常工作,我能够解决这个问题:

childDef.Style = Application.Current.FindResource("MaterialDesignGroupBox") as Style;

我仍在寻找一种在代码隐藏中应用MaterialDesign:ColorZoneAsist.Mode=“Accent”的方法,因为这似乎是应用除应用程序的主要MaterialDesign颜色以外的其他颜色的唯一方法。

谢谢你的回答Mikael,它非常有用,让我看到了一些我不知道的东西,这在我的情况下不起作用。材料设计似乎完全忽略了新的笔刷定义。米凯尔,我对你的答案投了赞成票,因为它对我很有用。我是StackOverflow的新手,所以我还没有必要的声誉来改变公开展示的内容。谢谢你的回答,Mikael,虽然它非常有用,让我看到了一些我不知道的东西,但在我的情况下它不起作用。材料设计似乎完全忽略了新的笔刷定义。米凯尔,我对你的答案投了赞成票,因为它对我很有用。我是StackOverflow的新手,所以我还没有必要的声誉来改变公开展示的内容。