当内容可见时动态更改 WPF 窗口的宽度

  • 本文关键字:WPF 窗口 动态 wpf vb.net
  • 更新时间 :
  • 英文 :


我希望能够在程序开始时隐藏屏幕的左侧和屏幕的右侧。

然后,当用户按下"新建"按钮时,屏幕左侧将变为可用,以便他们可以创建新项。然后,当他们按保存时,它仅返回到中间的数据网格。

然后

我想添加一个事件,当双击数据网格行(数据在代码中编程到数据网格中)屏幕的右侧变得可见,然后当按下按钮分配时,右侧再次消失只是离开数据网格。

我对 WPF 相当陌生,所以不确定是否可以做到这一点。目前,我正在为我的公司制作原型,并且已经有一些使用单独窗口的原型,我正在尝试在同一窗口中执行此操作。我发布了一张图片,但由于我是新用户而无法发布。

要隐藏和显示控件,我建议使用扩展器(如您的评论所说)或网格并根据需要设置其可见性。如果您希望侧面板显示在数据网格上,则只需更改其可见性即可显示它们。如果不想遮挡 DataGrid,则需要更改面板的可见性以及窗口的大小。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow">
<Grid>
    <!-- DataGrid display -->
    <Grid>
        <StackPanel>
            <Button Content="Add New" Click="OnAddNewButtonClick" Width="100"/>
            <DataGrid ItemsSource="{Binding GridItems}" IsReadOnly="True" Name="dataGrid">
                <DataGrid.RowStyle>
                    <Style TargetType="{x:Type DataGridRow}">
                        <EventSetter Event="MouseDoubleClick" Handler="OnRowDoubleClick"/>
                    </Style>
                </DataGrid.RowStyle>
            </DataGrid>
        </StackPanel>
    </Grid>
    <!-- Left column pops up over DataGrid -->
    <Grid Name="LeftColumn" Visibility="Collapsed" Background="Red" Width="200" HorizontalAlignment="Left">
        <StackPanel  VerticalAlignment="Center">
            <Button Content="Hide Column" Click="OnLeftColumnButtonClick"/>
        </StackPanel>
    </Grid>
    <!-- Right Column expands screen size-->
    <Grid  Visibility="Collapsed" Name="RightColumn" Width="200" HorizontalAlignment="Right">
        <StackPanel Background="Green" >
            <TextBlock Text="Hidden Column"/>
            <Button Content="Hide Panel" Click="OnRightColumnButtonClick"/>
        </StackPanel>
    </Grid>
</Grid>
</Window

C# - 我知道你正在使用 VB,但这对我来说更快。代码应该是相当不言自明的,但如果您需要 VB 示例,请告诉我:

public partial class MainWindow : Window
{
    public ObservableCollection<Person> GridItems { get; set; }
    private const double CollapsedWidth =  500;
    private const double ExpandedWidth = 700;
    public MainWindow()
    {
        DataContext = this;
        GridItems = new ObservableCollection<Person>();
        GridItems.Add(new Person { Name = "Foo", Age = 1 });
        GridItems.Add(new Person { Name = "Bar", Age = 2 });
        InitializeComponent();
        Width = CollapsedWidth;
    }
    private void OnAddNewButtonClick(object sender, RoutedEventArgs e)
    {
        LeftColumn.Visibility = Visibility.Visible;
    }
    private void OnLeftColumnButtonClick(object sender, RoutedEventArgs e)
    {
        LeftColumn.Visibility = Visibility.Collapsed;
    }
    private void OnRowDoubleClick(object sender, MouseButtonEventArgs e)
    {
        Width = ExpandedWidth;
        RightColumn.Visibility = Visibility.Visible;
    }
    private void OnRightColumnButtonClick(object sender, RoutedEventArgs e)
    {
        RightColumn.Visibility = Visibility.Collapsed;
        Width = CollapsedWidth;
    }
}

最新更新