我正在潛入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中會是一個更好的解決方案。你可以分別設計它們。 –