c# WPF,如何在单击按钮时展开表单?

标签 c# wpf

我正在开发一个 C# WPF 程序,我试图在单击按钮时使搜索表单展开(变大)(很像 Expander 函数,但是是整个表单)。

未展开的表单图片: enter image description here

展开时的表单图片: enter image description here

我一开始就隐藏了控件,当单击展开按钮时,控件是可见的,但表单不跟随,我必须手动使表单更大。我尝试了一切,并且已经搜索了几个小时。

我尝试了扩展器功能。我尝试了自动 sizeToContent 功能。

这是 XAML 代码:

<Window x:Class="MockUps.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Search" Icon="C:\Users\rasmus\Desktop\Lejos.dk\LejosLogo.jpg" WindowStartupLocation="Manual" Height="319" Width="480">
<Grid AllowDrop="False" Height="auto" Width="480" SizeChanged="Grid_SizeChanged" Margin="2,0,1,-151">
    <ComboBox HorizontalAlignment="Left" Margin="184,24,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Electrician"/>
        <ComboBoxItem Content="Metalworker"/>
        <ComboBoxItem Content="Landscaper"/>
        <ComboBoxItem Content="Painter"/>
        <ComboBoxItem Content="Plumber"/>
        <ComboBoxItem Content="Driver"/>
        <ComboBoxItem Content="Craneworker"/>
        <ComboBoxItem Content="Machineworker"/>
    </ComboBox>
    <Label Content="Job Type" HorizontalAlignment="Left" Margin="47,20,0,0" VerticalAlignment="Top"/>
    <Label Content="Certificate(s)" HorizontalAlignment="Left" Margin="28,60,0,0" VerticalAlignment="Top"/>
    <Label Content="Nationality" HorizontalAlignment="Left" Margin="36,140,0,0" VerticalAlignment="Top"/>
    <Label Content="Language(s)" HorizontalAlignment="Left" Margin="30,100,0,0" VerticalAlignment="Top"/>
    <ComboBox HorizontalAlignment="Left" Margin="184,64,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Welding"/>
        <ComboBoxItem Content="Offshore"/>
        <ComboBoxItem Content="Crane C"/>
        <ComboBoxItem Content="Crane B"/>
        <ComboBoxItem Content="Crane A"/>
        <ComboBoxItem Content="Arc-Welding / Lysbuesvejsning"/>
        <ComboBoxItem Content="TIG-Welding"/>
        <ComboBoxItem Content="Gas-Welding"/>
    </ComboBox>
    <ComboBox HorizontalAlignment="Left" Margin="184,104,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Danish"/>
        <ComboBoxItem/>
        <ComboBoxItem Content="Swedish"/>
        <ComboBoxItem Content="Norwegian"/>
        <ComboBoxItem Content="Deutsch"/>
        <ComboBoxItem Content="Polish"/>
        <ComboBoxItem Content="English"/>
    </ComboBox>
    <ComboBox HorizontalAlignment="Right" Margin="0,104,27,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Danish"/>
        <ComboBoxItem Content="Swedish"/>
        <ComboBoxItem Content="Norwegian"/>
        <ComboBoxItem Content="Deutsch"/>
        <ComboBoxItem Content="Polish"/>
        <ComboBoxItem Content="English"/>
    </ComboBox>
    <ComboBox HorizontalAlignment="Left" Margin="184,144,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Danish"/>
        <ComboBoxItem Content="Swedish"/>
        <ComboBoxItem Content="Norwegian"/>
        <ComboBoxItem Content="German"/>
        <ComboBoxItem Content="Polish"/>
    </ComboBox>
    <Label Content="Drivers License" HorizontalAlignment="Left" Margin="15,180,0,0" VerticalAlignment="Top"/>
    <ComboBox HorizontalAlignment="Left" Margin="184,180,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="B - Car"/>
        <ComboBoxItem Content="C1 - Small Truck"/>
        <ComboBoxItem Content="C - Big Truck"/>
        <ComboBoxItem Content="D1 - Small Bus"/>
        <ComboBoxItem Content="D - Big Bus"/>
        <ComboBoxItem Content="E - Trailer"/>
    </ComboBox>
    <ComboBox HorizontalAlignment="Right" Margin="0,64,27,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Welding"/>
        <ComboBoxItem Content="Offshore"/>
        <ComboBoxItem Content="Crane C"/>
        <ComboBoxItem Content="Crane B"/>
        <ComboBoxItem Content="Crane A"/>
        <ComboBoxItem Content="Arc-Welding / Lysbuesvejsning"/>
        <ComboBoxItem Content="TIG-Welding"/>
        <ComboBoxItem Content="Gas-Welding"/>
    </ComboBox>
    <Button Content="Search" HorizontalAlignment="Left" Margin="137,257,0,0" VerticalAlignment="Top" Width="75"/>
    <Label Content="Experience" HorizontalAlignment="Left" Margin="37,220,0,0" VerticalAlignment="Top"/>
    <ComboBox HorizontalAlignment="Left" Margin="184,220,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Min. 5 Years"/>
        <ComboBoxItem Content="Min. 10 Years"/>
        <ComboBoxItem Content="Min. 15 Years"/>
        <ComboBoxItem Content="Min. 20 Years"/>
    </ComboBox>
    <Image HorizontalAlignment="Right" Height="96" VerticalAlignment="Top" Width="120" Margin="0,144,27,0" Source="C:\Users\rasmus\Desktop\Lejos.dk\LejosLogo.jpg" Stretch="Fill"/>
    <Button Content="Expand" HorizontalAlignment="Left" Margin="268,257,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
    <Label x:Name="lblGender" Content="Gender" HorizontalAlignment="Left" Margin="55,300,0,0" VerticalAlignment="Top" Visibility="Hidden"/>
    <Label x:Name="lblMinAge" Content="Min. Age" HorizontalAlignment="Left" Margin="47,340,0,0" VerticalAlignment="Top" Visibility="Hidden"/>
    <Label x:Name="lblMaxAge" Content="Max. Age" HorizontalAlignment="Left" Margin="47,380,0,0" VerticalAlignment="Top" Visibility="Hidden"/>
    <ComboBox x:Name="CBGender" HorizontalAlignment="Left" Margin="184,304,0,0" VerticalAlignment="Top" Width="120" Visibility="Hidden">
        <ComboBoxItem Content="Male"/>
        <ComboBoxItem Content="Female"/>
    </ComboBox>
    <ComboBox x:Name="CBMinAge" HorizontalAlignment="Left" Margin="184,344,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="CBMinAge_SelectionChanged" Visibility="Hidden"/>
    <ComboBox x:Name="CBMaxAge" HorizontalAlignment="Left" Margin="184,384,0,0" VerticalAlignment="Top" Width="120" Visibility="Hidden"/>

</Grid>

谢谢大家 //拉斯穆斯

最佳答案

哦,哇,您可能应该重新编写整个布局,而不是使用 1 个网格来放置所有内容并使用边距来放置它们。以下是如何使用简单样式来切换表单下部的可见性的示例。

“同时隐藏以提高可见性”与“折叠”不同。隐藏元素将占用为其保留的布局空间。崩溃不会。

<Window x:Class="MockUps.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                Title="Search" 
                SizeToContent="WidthAndHeight">
    <StackPanel>
        <Grid>
            <ToggleButton x:Name="ExpandButton" Content="Expand"/>
        </Grid>

        <Grid>
            <Grid.Style>
                <Style TargetType="{x:Type Grid}">
                    <Setter Property="Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=ExpandButton, Path=IsChecked}" Value="True">
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Style>

            <Label Content="Gender"/>
            <Label Content="Min. Age"/>
            <Label Content="Max. Age"/>

            <ComboBox>
                <ComboBoxItem Content="Male"/>
                <ComboBoxItem Content="Female"/>
            </ComboBox>

            <ComboBox/>

            <ComboBox/>
        </Grid>
    </StackPanel>
</Window>

关于c# WPF,如何在单击按钮时展开表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738377/

相关文章:

c# - 将图 A 更改为图 B

c# - 在 C# 中,从实际上充满子项的 List<Parent> 中,如何访问这些子项的特定构造函数?

wpf - 如何从 XAML 中为样式中的控件指定工具提示?

wpf - 如何使 WPF 形状完全填充

c# - WPF MVVM 从同一层级导航 betweel View

c# - 反转多个 XOR、ADD 函数

c# - 在 C# 中将 List<anonymous type> 传递到需要 List<T> 的方法中

c# - LINQ - 查找给定列表中的所有项目都包含在 icollection 中的所有记录

c# - WPF Mouse.Capture 导致窗口卡住

c# - 如何在ListView中将两列的值连接成一列