如何使用MahApps在所有应用程序窗口上设置Windows 10标题栏按钮样式

问题描述 投票:0回答:1

我是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的一个实例,并且只能将其分配给一个窗口。我不确定从这里要去哪里。

wpf xaml mahapps.metro
1个回答
0
投票

尝试将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>
© www.soinside.com 2019 - 2024. All rights reserved.