2013-07-20 119 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越爱着它...... –