WPF隐藏顶面板布局
我是WPF的新手,我很难理解所有面板和网格,以及它们如何协同工作来构建所需的布局。我试图构建一个窗口,其中顶部部分(面板)有一组控件,面板有一个隐藏按钮。当用户单击“隐藏”时,顶部向上滑动,底部展开以取代其位置。我可以使用什么样的面板组合来生成这种类型的布局?有没有一个我还没有找到的例子WPF隐藏顶面板布局,wpf,xaml,Wpf,Xaml,我是WPF的新手,我很难理解所有面板和网格,以及它们如何协同工作来构建所需的布局。我试图构建一个窗口,其中顶部部分(面板)有一组控件,面板有一个隐藏按钮。当用户单击“隐藏”时,顶部向上滑动,底部展开以取代其位置。我可以使用什么样的面板组合来生成这种类型的布局?有没有一个我还没有找到的例子 您好,如果您想使用MVVM解决此问题,请尝试以下方法 xaml。这里我有一个有三行的网格 视图模型 public class ViewModel:INotifyPropertyChanged {
您好,如果您想使用MVVM解决此问题,请尝试以下方法 xaml。这里我有一个有三行的网格 视图模型
public class ViewModel:INotifyPropertyChanged
{
public ViewModel()
{
SetInitialState();
}
void SetInitialState()
{
buttonState = ButtonState.Shown;
GridVisibility = Visibility.Visible;
ButtonText = "Hide";
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this,
new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
private string buttonText;
public string ButtonText
{
get
{
return buttonText;
}
set
{
buttonText = value;
OnPropertyChanged("ButtonText");
}
}
private Visibility gridVisibility;
public Visibility GridVisibility
{
get
{
return gridVisibility;
}
set
{
gridVisibility = value;
OnPropertyChanged("GridVisibility");
}
}
private MyCommand showHideCommand;
public MyCommand ShowHidecommand
{
get { return showHideCommand ?? (showHideCommand = new MyCommand((o) => OnShowHideCommand(o), () => true)); }
}
public void OnShowHideCommand(object obj)
{
if (buttonState == ButtonState.Shown)
{
buttonState = ButtonState.Hidden;
GridVisibility = Visibility.Collapsed;
ButtonText = "Show";
}
else
{
buttonState = ButtonState.Shown;
GridVisibility = Visibility.Visible;
ButtonText = "Hide";
}
}
ButtonState buttonState;
enum ButtonState
{
Shown,
Hidden
}
}
MyCommand.cs
您好,如果您想使用MVVM解决此问题,请尝试以下方法 xaml。这里我有一个有三行的网格 视图模型
public class ViewModel:INotifyPropertyChanged
{
public ViewModel()
{
SetInitialState();
}
void SetInitialState()
{
buttonState = ButtonState.Shown;
GridVisibility = Visibility.Visible;
ButtonText = "Hide";
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this,
new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
private string buttonText;
public string ButtonText
{
get
{
return buttonText;
}
set
{
buttonText = value;
OnPropertyChanged("ButtonText");
}
}
private Visibility gridVisibility;
public Visibility GridVisibility
{
get
{
return gridVisibility;
}
set
{
gridVisibility = value;
OnPropertyChanged("GridVisibility");
}
}
private MyCommand showHideCommand;
public MyCommand ShowHidecommand
{
get { return showHideCommand ?? (showHideCommand = new MyCommand((o) => OnShowHideCommand(o), () => true)); }
}
public void OnShowHideCommand(object obj)
{
if (buttonState == ButtonState.Shown)
{
buttonState = ButtonState.Hidden;
GridVisibility = Visibility.Collapsed;
ButtonText = "Show";
}
else
{
buttonState = ButtonState.Shown;
GridVisibility = Visibility.Visible;
ButtonText = "Hide";
}
}
ButtonState buttonState;
enum ButtonState
{
Shown,
Hidden
}
}
MyCommand.cs
令人惊叹的。谢谢@ethicalogics我会尝试一下的!谢谢@ethicalogics,它非常有效。如果我能接受两次答案,我会的!感谢您介绍这两种方法:)太棒了。谢谢@ethicalogics我会尝试一下的!谢谢@ethicalogics,它非常有效。如果我能接受两次答案,我会的!感谢您介绍这两种方法:)
public class ViewModel:INotifyPropertyChanged
{
public ViewModel()
{
SetInitialState();
}
void SetInitialState()
{
buttonState = ButtonState.Shown;
GridVisibility = Visibility.Visible;
ButtonText = "Hide";
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this,
new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
private string buttonText;
public string ButtonText
{
get
{
return buttonText;
}
set
{
buttonText = value;
OnPropertyChanged("ButtonText");
}
}
private Visibility gridVisibility;
public Visibility GridVisibility
{
get
{
return gridVisibility;
}
set
{
gridVisibility = value;
OnPropertyChanged("GridVisibility");
}
}
private MyCommand showHideCommand;
public MyCommand ShowHidecommand
{
get { return showHideCommand ?? (showHideCommand = new MyCommand((o) => OnShowHideCommand(o), () => true)); }
}
public void OnShowHideCommand(object obj)
{
if (buttonState == ButtonState.Shown)
{
buttonState = ButtonState.Hidden;
GridVisibility = Visibility.Collapsed;
ButtonText = "Show";
}
else
{
buttonState = ButtonState.Shown;
GridVisibility = Visibility.Visible;
ButtonText = "Hide";
}
}
ButtonState buttonState;
enum ButtonState
{
Shown,
Hidden
}
}
public class MyCommand : ICommand
{
Action<object> executeAction;
Func<bool> canExecute;
public MyCommand(Action<object> executeAction, Func<bool> canExecute)
{
this.executeAction = executeAction;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
if (canExecute != null)
return canExecute();
else
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (executeAction != null)
executeAction(parameter);
}
}
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="showHideGrid">
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<TextBlock Text="here will be some controls" FontSize="20"/>
</Grid>
<Button Content="Show" Grid.Row="1" Click="Button_Click_1"/>
<DataGrid Grid.Row="2"></DataGrid>
</Grid>
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var button = sender as Button;
if (button != null)
{
if (button.Content == "Show")
{
button.Content = "Hide";
showHideGrid.Visibility = Visibility.Visible;
}
else
{
button.Content = "Show";
showHideGrid.Visibility = Visibility.Collapsed;
}
}
}