我正在潜入WPF,来自Winforms背景,我使用groupbox来显示和隐藏“面板”,具体取决于所点击的菜单选项。这在设计时有一个噩梦有多个重叠的组框。groupbox的替代选择?
WPF是否解决了这个问题?组箱还是要走吗?还是有更好的解决方案?
我正在潜入WPF,来自Winforms背景,我使用groupbox来显示和隐藏“面板”,具体取决于所点击的菜单选项。这在设计时有一个噩梦有多个重叠的组框。groupbox的替代选择?
WPF是否解决了这个问题?组箱还是要走吗?还是有更好的解决方案?
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以获得解释
谢谢你的信息。我越是进入WPF越爱着它...... –
不是说它已经相关了,但UserControls在WinForms中会是一个更好的解决方案。你可以分别设计它们。 –