1. 程式人生 > 其它 >WPF 內建 BUG 之:ResizeMode 和 窗體尺寸

WPF 內建 BUG 之:ResizeMode 和 窗體尺寸

技術標籤:桌面軟體C#WPF

▪ 前言

在用 .Net 4.0 開發 WPF 軟體時,我們可能需要禁用或者隱藏視窗右上角的 最小化、最大化或關閉 按鈕(當然同時可能也伴隨著需要固定視窗尺寸的要求)。

好在 WPF 已經為我們提供了非常方便的方法,利用 Window 標籤的 ResizeMode 屬性,我們可以按需設定自己想要的效果:

<Window x:Class="CarSensorMelexis.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CarSensorMelexis"
        Width="500" Height="200" ResizeMode="CanMinimize">

  • ResizeMode="NoResize" 隱藏 最小化最大化 按鈕,顯示 關閉 按鈕(同時能固定視窗尺寸)
  • ResizeMode="CanMinimize" 顯示 最小化關閉 按鈕,禁用 最大化 按鈕(同時能固定視窗尺寸)

▪ 重現 BUG

上面的程式碼中你可能很難察覺出哪裡有BUG,那麼我們修改一下程式碼,將 ResizeMode 的實現放到 C# 的視窗程式碼裡:

# xaml
<Window ... Title="MainWindow" Width="300" Height="100">
    <Button Content="禁用最大化" Click="Button_Click"></Button>
</Window>
# cs
private void Button_Click( object sender, RoutedEventArgs e )
{
    this.ResizeMode = ResizeMode.CanMinimize;
}

將上面的程式碼在 VS 裡面編譯啟動,然後關閉軟體。

接著進入專案所在的資料夾,在 bin/Debug/ 下雙擊 exe 檔案開啟軟體,然後點選按鈕 “禁用最大化”,此時你會發現最大化按鈕禁用了,但是視窗的尺寸好像改變了:

image

在上圖中,我們可以很明顯看到禁用最大化按鈕後的視窗尺寸變大了,而且標題欄高度變小了。

結論:啟用了 ResizeMode="NoResize"

ResizeMode="CanMinimize" 等屬性值後,視窗標題欄高度減少,視窗尺寸增大

▪ 解決方法

以上的 BUG 目前測試過來發生在 .Net 4.0 版本,升級到 4.5 即可解決該BUG