1

我正在深入研究 WPF,来自 Winforms 背景,我使用组框来显示和隐藏“面板”,具体取决于单击的菜单选项。这在设计时有多个重叠的组框有点像噩梦。

WPF 能解决这个问题吗?组框仍然是要走的路吗?还是有更好的解决方案?

4

1 回答 1

4

WPF GroupBox 上有一个名为“Visibility”的属性(继承自 UIElement),可以通过绑定在视图模型中进行控制。

此 Xaml 片段显示 GroupBox 的可见性绑定到名为“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了解说明

于 2013-07-20T12:35:59.843 回答