2013-07-20 51 views
0

我正在潛入WPF,來自Winforms背景,我使用groupbox來顯示和隱藏「面板」,具體取決於所點擊的菜單選項。這在設計時有一個噩夢有多個重疊的組框。groupbox的替代選擇?

WPF是否解決了這個問題?組箱還是要走嗎?還是有更好的解決方案?

+0

不是說它已經相關了,但UserControls在WinForms中會是一個更好的解決方案。你可以分別設計它們。 –

回答

3

WPF GroupBox上有一個名爲'Visibility'的屬性(繼承自UIElement),它可以通過綁定在視圖模型中進行控制。

此XAML片段展示了一個分組框的束縛於所謂的 'MyGroupBoxVisibility' 屬性的知名度......

<Grid> 
    <GroupBox Header="This and that" Visibility="{Binding MyGroupBoxVisibility}" Background="Plum"/> 
</Grid> 

其中包含了 'MyGroupBoxVisibility' 是一個示例視圖模型...

public class ViewModel : INotifyPropertyChanged 
{ 
    public ViewModel() 
    { 
     HideTheGroupBox(); 
    } 
    private void ShowTheGroupBox() 
    { 
     MyGroupBoxVisibility = Visibility.Visible; 
    } 
    private void HideTheGroupBox() 
    { 
     MyGroupBoxVisibility = Visibility.Collapsed; 
    } 
    private Visibility _myGroupBoxVisibility; 
    public Visibility MyGroupBoxVisibility 
    { 
     [DebuggerStepThrough] 
     get { return _myGroupBoxVisibility; } 
     [DebuggerStepThrough] 
     set 
     { 
      if (value != _myGroupBoxVisibility) 
      { 
       _myGroupBoxVisibility = value; 
       OnPropertyChanged("MyGroupBoxVisibility"); 
      } 
     } 
    } 
    #region INotifyPropertyChanged Implementation 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string name) 
    { 
     var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null); 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
    #endregion 
} 

該示例有兩個方法可以來回切換可見性。您可以使用這種技術將您的WinForms內容轉移到WPF中,並將其保留在MVVM中。

ETA:請注意理解摺疊和隱藏可見度之間的差異至關重要。請參閱http://msdn.microsoft.com/en-us/library/system.windows.visibility(v=vs.110).aspx以獲得解釋

+0

謝謝你的信息。我越是進入WPF越愛着它...... –