WPF UI 元素在其他元素折叠时不增长
WPF UI element not growing when other element gets collapsed
我希望元素在其他元素折叠时采用新的可用 space(例如宽度)。在我的示例中,当我折叠复选框时,第一个按钮没有变宽。我在这里做错了什么?谢谢!
XAML:
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Width="250" Height="150"
Title="MainWindow">
<StackPanel Width="200" Height="80">
<StackPanel Orientation="Horizontal">
<Button Height="25" Margin="5" Content="Button 1"/>
<CheckBox Content="Checkbox" VerticalAlignment="Center" Visibility="{Binding CheckBoxVisibility}"/>
</StackPanel>
<Button Height="25" Margin="5" Content="Change visibility" Click="Button_Click"/>
</StackPanel>
</Window>
后面的代码:
using System.Windows;
namespace WpfApp3
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
private MainViewModel _viewModel => DataContext as MainViewModel;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (_viewModel.CheckBoxVisibility == Visibility.Visible)
{
_viewModel.CheckBoxVisibility = Visibility.Collapsed;
}
else if (_viewModel.CheckBoxVisibility == Visibility.Collapsed)
{
_viewModel.CheckBoxVisibility = Visibility.Hidden;
}
else
{
_viewModel.CheckBoxVisibility = Visibility.Visible;
}
}
}
}
视图模型:
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
namespace WpfApp3
{
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel()
{
CheckBoxVisibility = Visibility.Hidden;
}
public event PropertyChangedEventHandler PropertyChanged;
private Visibility _checkBoxVisibility;
public Visibility CheckBoxVisibility
{
get => _checkBoxVisibility;
set
{
_checkBoxVisibility = value;
OnPropertyChanged();
}
}
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
水平 StackPanel 中的元素不会水平拉伸,它们需要最小的宽度。
<StackPanel Orientation="Horizontal">
<Button Height="25" Margin="5" Content="Button 1"/>
<CheckBox Content="Checkbox" VerticalAlignment="Center" Visibility="{Binding CheckBoxVisibility}"/>
</StackPanel>
用网格替换 StackPanel
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Height="25" Margin="5" Content="Button 1" Grid.Column="0"/>
<CheckBox Content="Checkbox" Grid.Column="1"
VerticalAlignment="Center"
Visibility="{Binding CheckBoxVisibility}"/>
</Grid>
我希望元素在其他元素折叠时采用新的可用 space(例如宽度)。在我的示例中,当我折叠复选框时,第一个按钮没有变宽。我在这里做错了什么?谢谢!
XAML:
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Width="250" Height="150"
Title="MainWindow">
<StackPanel Width="200" Height="80">
<StackPanel Orientation="Horizontal">
<Button Height="25" Margin="5" Content="Button 1"/>
<CheckBox Content="Checkbox" VerticalAlignment="Center" Visibility="{Binding CheckBoxVisibility}"/>
</StackPanel>
<Button Height="25" Margin="5" Content="Change visibility" Click="Button_Click"/>
</StackPanel>
</Window>
后面的代码:
using System.Windows;
namespace WpfApp3
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
private MainViewModel _viewModel => DataContext as MainViewModel;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (_viewModel.CheckBoxVisibility == Visibility.Visible)
{
_viewModel.CheckBoxVisibility = Visibility.Collapsed;
}
else if (_viewModel.CheckBoxVisibility == Visibility.Collapsed)
{
_viewModel.CheckBoxVisibility = Visibility.Hidden;
}
else
{
_viewModel.CheckBoxVisibility = Visibility.Visible;
}
}
}
}
视图模型:
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
namespace WpfApp3
{
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel()
{
CheckBoxVisibility = Visibility.Hidden;
}
public event PropertyChangedEventHandler PropertyChanged;
private Visibility _checkBoxVisibility;
public Visibility CheckBoxVisibility
{
get => _checkBoxVisibility;
set
{
_checkBoxVisibility = value;
OnPropertyChanged();
}
}
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
水平 StackPanel 中的元素不会水平拉伸,它们需要最小的宽度。
<StackPanel Orientation="Horizontal">
<Button Height="25" Margin="5" Content="Button 1"/>
<CheckBox Content="Checkbox" VerticalAlignment="Center" Visibility="{Binding CheckBoxVisibility}"/>
</StackPanel>
用网格替换 StackPanel
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Height="25" Margin="5" Content="Button 1" Grid.Column="0"/>
<CheckBox Content="Checkbox" Grid.Column="1"
VerticalAlignment="Center"
Visibility="{Binding CheckBoxVisibility}"/>
</Grid>