我是WPF的新手,我正在使用MahApps。我想在应用程序的所有窗口上设置Windows 10样式标题栏按钮。我可以通过添加
为每个窗口分别执行此操作<ma:MetroWindow.WindowButtonCommands>
<ma:WindowButtonCommands Style="{DynamicResource MahApps.Styles.WindowButtonCommands.Win10}" />
</ma:MetroWindow.WindowButtonCommands>
到每个窗口xaml。但是,我想将此样式设置为App.xaml中的样式,因此不必在每个窗口中都重复此样式。我尝试过
<Application.Resources>
<ResourceDictionary>
<Style x:Key="WindowStyle" TargetType="{x:Type ma:MetroWindow}">
<Setter Property="WindowButtonCommands">
<Setter.Value>
<ma:WindowButtonCommands Style="{DynamicResource MahApps.Styles.WindowButtonCommands.Win10}" />
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
但是它仅适用于第一个窗口。随后打开的Windows崩溃,并显示错误消息“指定的元素已经是另一个元素的逻辑子代。请先断开连接。”显然,仅实例化WindowButtonCommands的一个实例,并且只能将其分配给一个窗口。我不确定从这里要去哪里。
尝试将WindowButtonCommands
元素定义为单独的非共享资源:
<Application.Resources>
<ResourceDictionary>
<ma:WindowButtonCommands x:Key="commands" x:Shared="False" Style="{DynamicResource MahApps.Styles.WindowButtonCommands.Win10}" />
<Style x:Key="WindowStyle" TargetType="{x:Type ma:MetroWindow}">
<Setter Property="WindowButtonCommands" Value="{StaticResource commands}" />
</Style>
</ResourceDictionary>
</Application.Resources>