WinForms vs WPF 差異
| 框架 | 屬性名 | 類型 | 值範圍 |
| WinForms | Visible | bool | true / false |
| WPF | Visibility | enum (Visibility) | Visible / Hidden / Collapsed |
WPF 三種可見性狀態
// 可見(預設)
myButton.Visibility = Visibility.Visible;
// 隱藏但佔據佈局空間
myButton.Visibility = Visibility.Hidden;
// 隱藏且不佔據佈局空間(相當於 WinForms Visible=false)
myButton.Visibility = Visibility.Collapsed;
視覺化差異
[Visible] : ████████████ (顯示,佔空間)
[Hidden] : ░░░░░░░░░░ (不顯示,保留空間)
[Collapsed] : (不顯示,不佔空間,後續元素前移)
常用場景對照
| 需求 | 推薦值 | 說明 |
| 條件顯示/隱藏,保持佈局穩定 | Hidden | 避免 UI 跳動 |
| 彈出面板、標籤頁切換、動態表單 | Collapsed | 空間釋放,自動重排 |
| 動畫淡入/淡出 | Hidden + Opacity | 配合動畫保留佈局 |
XAML 綁定範例(MVVM)
<Button Content="提交"
Visibility="{Binding IsAdmin, Converter={StaticResource BoolToVisConverter}}" />
// 轉換器
public class BoolToVisibilityConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
return (Visibility)value == Visibility.Visible;
}
}
程式碼後置切換
private void TogglePanel() {
myPanel.Visibility = myPanel.Visibility == Visibility.Visible
? Visibility.Collapsed
: Visibility.Visible;
}
掌握 Hidden 與 Collapsed 的佈局行為差異,是 WPF 介面開發的基本功。