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

时间:2012-06-22 11:00:43

标签: wpf vb.net

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

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

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

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

1 个答案:

答案 0 :(得分:1)

要隐藏和显示控件,我建议您使用扩展器(如您的评论所说)或网格,并根据需要设置其可见性。如果您希望侧面板显示在数据网格上,则显示它们只是改变其可见性的问题。如果不想隐藏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;
    }
}