我正在深入研究 WPF,来自 Winforms 背景,我使用组框来显示和隐藏“面板”,具体取决于单击的菜单选项。这在设计时有多个重叠的组框有点像噩梦。
WPF 能解决这个问题吗?组框仍然是要走的路吗?还是有更好的解决方案?
我正在深入研究 WPF,来自 Winforms 背景,我使用组框来显示和隐藏“面板”,具体取决于单击的菜单选项。这在设计时有多个重叠的组框有点像噩梦。
WPF 能解决这个问题吗?组框仍然是要走的路吗?还是有更好的解决方案?
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了解说明