Cha*_*ton 5 c# wpf xaml dialog mahapps.metro
我想像这样显示一个metro风格的对话框:
public async void Button_Click(object sender, RoutedEventArgs e)
{
var metroWindow = (Application.Current.MainWindow as MetroWindow);
await metroWindow.ShowMessageAsync("Title", "Body");
}
Run Code Online (Sandbox Code Playgroud)
但是,它一直在抛出错误:
mscorlib.dll中发生了未处理的"System.NullReferenceException"类型异常
使用堆栈跟踪:
在MahApps.Metro.Controls.Dialogs.BaseMetroDialog.HandleTheme()
在MahApps.Metro.Controls.Dialogs.BaseMetroDialog.Initialize()
在MahApps.Metro.Controls.Dialogs.BaseMetroDialog..ctor(MetroWindow owningWindow,MetroDialogSettings设置)
...
在System.Threading.ThreadHelper.ThreadStart()
经过大量的摆弄,我意识到我需要在我的App.xaml
资源中添加一个重点来给它一个配色方案.
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" />
Run Code Online (Sandbox Code Playgroud)
但是,我已经构建了我的程序,没有它,包括它已经搞砸了我的所有样式.此外,这里看到的口音总数不多,我找不到符合我方案的口音.
我一直试图ShowMessageAsync
用这样的命令直接给它自己的颜色方案方法
metroWindow.MetroDialogOptions.ColorScheme = MetroDialogOptions.ColorScheme
// MetroDialogColorScheme.Theme
// MetroDialogColorScheme.Accented
// MetroDialogColorScheme.Inverted;
Run Code Online (Sandbox Code Playgroud)
但同样的错误仍在继续出现.有办法解决这个问题吗?我怎么能让对话框使用我自己的风格?
编辑
我实际上已经在这里下载了这个文件:https://github.com/MahApps/MahApps.Metro/blob/master/MahApps.Metro/Styles/Accents/Cobalt.xaml
并ResourceDirectory.MergedDictionaries
取代
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" />
Run Code Online (Sandbox Code Playgroud)
同
<ResourceDictionary Source="Cobalt.xaml" />
Run Code Online (Sandbox Code Playgroud)
这足以打破这个功能.我可以看到该主题仍然有效,但是当我尝试触发对话框时,窗口将会淡出,但对话框不会出现,我需要重新启动程序.这是怎么回事?
你应该看看ThemeManager
. 设置AppStyle
应用程序启动的时间,如下所示:
ThemeManager.ChangeAppStyle(this, ThemeManager.Accents.First(x => x.Name == "Red"), ThemeManager.DetectAppStyle().Item1);
Run Code Online (Sandbox Code Playgroud)
这是可用主题的示例:
要使用您自己的样式,您可以添加重音符号,如下所示:
ThemeManager.AddAccent("XpertdocBlue", new Uri("XpertdocBlue.xaml", UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)
尝试添加一个ResourceDictionary
这是我的:
<controls:MetroWindow.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml"/>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml"/>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml"/>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Xpertdoc.PortalWordAddIn.Views;component/Resources/Icons.xaml"/>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="XpertdocBlue.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</controls:MetroWindow.Resources>
Run Code Online (Sandbox Code Playgroud)
这是我的自定义口音 ( XpertdocBlue.xaml
):
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Color x:Key="HighlightColor">#FF2B579A</Color>
<Color x:Key="AccentColor">#FF2B579A</Color>
<!--60%-->
<Color x:Key="AccentColor2">#CC2B579A</Color>
<!--40%-->
<Color x:Key="AccentColor3">#992B579A</Color>
<!--20%-->
<Color x:Key="AccentColor4">#662B579A</Color>
<!-- re-set brushes too -->
<SolidColorBrush x:Key="HighlightBrush" Color="{StaticResource HighlightColor}" />
<SolidColorBrush x:Key="AccentColorBrush" Color="{StaticResource AccentColor}"/>
<SolidColorBrush x:Key="AccentColorBrush2" Color="{StaticResource AccentColor2}"/>
<SolidColorBrush x:Key="AccentColorBrush3" Color="{StaticResource AccentColor3}"/>
<SolidColorBrush x:Key="AccentColorBrush4" Color="{StaticResource AccentColor4}"/>
<SolidColorBrush x:Key="WindowTitleColorBrush" Color="{StaticResource AccentColor}" />
<SolidColorBrush x:Key="AccentSelectedColorBrush" Color="White" />
<LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5">
<GradientStop Color="{StaticResource HighlightColor}" Offset="0" />
<GradientStop Color="{StaticResource AccentColor3}" Offset="1" />
</LinearGradientBrush>
<SolidColorBrush x:Key="CheckmarkFill" Color="{StaticResource AccentColor}" />
<SolidColorBrush x:Key="RightArrowFill" Color="{StaticResource AccentColor}" />
<Color x:Key="IdealForegroundColor">White</Color>
<SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{StaticResource IdealForegroundColor}"/>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)