在WPF中为自定义窗口创建标准行为自定义最大化/恢复按钮

时间:2014-03-13 12:48:10

标签: c# wpf .net-4.5

我在http://www.youtube.com/watch?v=EuhhL_NF-B0使用了示例并下载了源代码,以构成自定义窗口chrome的基础。我已经改变了一下,因为它看起来相当丑陋。此外,我还为关闭,最大化和最小化按钮添加了自定义图像。

但是,我注意到标准行为是根据当时窗口是处于最大化还是正常状态而显示的最大/恢复的不同图像。

有人有人建议怎么做吗?

1 个答案:

答案 0 :(得分:0)

只需添加两个按钮并隐藏不必要的触发器。两个按钮便于实现不同的行为。

在您的模板中添加以下内容:

<ControlTemplate TargetType="{x:Type Window}">
    ...
    <cc:ImageButton ImageSource=".../CloseWindow.png" x:Name="closeButton" Click="OnCloseClick" />
    <cc:ImageButton ImageSource=".../MaximizeWindow.png" x:Name="maximizeButton" Visibility="Collapsed" Click="OnMaximizeClick" />
    <cc:ImageButton ImageSource=".../RestoreWindow.png" x:Name="restoreButton" Visibility="Collapsed" Click="OnRestoreClick" />
    <cc:ImageButton ImageSource=".../Help.png" x:Name="helpButton" Click="OnHelpClick" />
 ...
<ControlTemplate.Triggers>
    <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="ResizeMode" Value="CanResizeWithGrip" />
            <Condition Property="WindowState" Value="Normal" />
        </MultiTrigger.Conditions>
        <Setter TargetName="maximizeButton" Property="Visibility" Value="Visible" />
    </MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>

别介意cc:ImageButton - 只需用Image或any替换它。 如果您不需要设置不可调整大小的窗口样式,也可以省略第一个触发条件。

也可以为单个图像更改ImageSource。但是两个按钮更灵活。

如果需要,我可以发布我的窗口样式的完整来源。它工作正常。