相关文章推荐
奔跑的小虾米  ·  WPF ...·  2 周前    · 
高大的洋葱  ·  WPF ...·  2 周前    · 
知识渊博的奔马  ·  win系统'tar' ...·  1 周前    · 
阳刚的数据线  ·  Win10下VScode ...·  3 月前    · 
不拘小节的开心果  ·  口碑榜 | ...·  1 年前    · 

WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。

原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。

自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。

一、Groupbox控件详解

GroupBox控件是WPF(Windows Presentation Foundation)中一个常用的容器控件,可用于将一组相关的控件进行分组并提高可读性。

GroupBox控件通常包含一个标题,用于描述其所包含的控件。它可以通过设置Header属性来设置标题,也可以通过设置HeaderTemplate属性来自定义标题的显示方式。

GroupBox控件还可以使用不同的样式和模板进行自定义,以满足不同的设计和用户需求。可以使用样式和模板来改变GroupBox的边框样式、背景颜色、字体等属性。

下面是一个GroupBox控件的样例,其中包含一些文本框和按钮控件:

<GroupBox Header="Personal Information">
    <StackPanel Margin="10">
        <TextBlock Text="Name:"/>
        <TextBox/>
        <TextBlock Text="Age:"/>
        <TextBox/>
        <Button Content="Save"/>
    </StackPanel>
</GroupBox>

这里我们创建了一个GroupBox,标题为“Personal Information”,并包含了一些文本框和按钮。它们被放置在一个StackPanel中,用于控制它们的布局和对齐方式。

使用GroupBox控件可以使复杂的界面更加清晰和易于阅读,并且可以通过样式和模板来增强其可定制性。

1.属性介绍

WPF中Groupbox控件的属性有:

Header:用于设置GroupBox的标题文本。

HeaderTemplate:用于设置GroupBox的标题模板,可以自定义GroupBox标题的样式。

BorderBrush:用于设置GroupBox的边框颜色。

BorderThickness:用于设置GroupBox的边框厚度。

Background:用于设置GroupBox的背景颜色。

Padding:用于设置GroupBox内部的空白区域。

IsEnabled:用于设置GroupBox是否可用。

IsTabStop:用于设置GroupBox是否可以被Tab键选中。

FlowDirection:用于设置GroupBox的文本流向,可以是从左到右或从右到左。

Margin:用于设置GroupBox与其父容器之间的边距。

HorizontalContentAlignment:用于设置GroupBox中内容的水平对齐方式。

VerticalContentAlignment:用于设置GroupBox中内容的垂直对齐方式。

Template:用于设置GroupBox的外观模板,可以自定义GroupBox的外观样式。

2.常用场景

WPF中Groupbox控件常用于以下场景:

  • 分组:当需要将某些相关控件进行分组时,可以使用Groupbox控件,将它们放在一个框架中,给用户提供更好的可视化效果。
  • 选项:当需要让用户在多个选项中进行选择时,可以将这些选项放在Groupbox控件中,以便用户更加方便地浏览和选择。
  • 信息:当需要在界面上显示一组相关的信息时,可以使用Groupbox控件将这些信息进行分组显示。
  • 布局:当需要对一组控件进行布局时,可以使用Groupbox控件作为容器,对其中的控件进行排列布局。
  • Groupbox控件常用于界面设计中的分组和布局,可以使界面更加直观、美观和易于使用。

    3.具体案例

    <Window x:Class="WpfAppTest.GroupBoxWindow"
            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"
            xmlns:local="clr-namespace:WpfAppTest"
            mc:Ignorable="d"
            Title="GroupBoxWindow" Height="450" Width="800" Loaded="Window_Loaded">
                    <!-- 分组控件  内容控件   只能有一个元素作为它的Content
                         如果我想在它的内部呈放多个子元素????   ——布局控件   -容纳多个元素
                    <GroupBox  Header="导航菜单"  Width="200"  Height="200" BorderThickness="2" BorderBrush="Red">
                            <StackPanel>
                                    <Label Content="这是一个GroupBox控件"/>
                                    <Label Content="这是一个GroupBox控件"/>
                                    <Label Content="这是一个GroupBox控件"/>
                                    <Label Content="这是一个GroupBox控件"/>
                            </StackPanel>
                    </GroupBox>
                    <GroupBox  Header="导航菜单2"  Width="221"  Height="200" BorderThickness="2" BorderBrush="Red" Margin="32,110,0,0" HorizontalAlignment="Left"  VerticalAlignment="Top" Name="gbInfo">
                            <StackPanel Orientation="Vertical" >
                                    <StackPanel Orientation="Horizontal" >
                                            <Label Content="用户名:"/>
                                            <TextBox Name="txtUserName" Text="userName"  Width="150"/>
                                    </StackPanel>
                                    <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
                                            <Label Content="密码:"/>
                                            <PasswordBox Password="123456"  Width="150"/>
                                    </StackPanel>
                            </StackPanel>
                    </GroupBox>
            </Grid>
    </Window>
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
            //如果我们没有设置TextBox的name属性,通过GroupBox控件去获取
            StackPanel spFirst = gbInfo.Content as StackPanel;
            foreach(var ele in  spFirst.Children)
                    StackPanel sp = ele as StackPanel;
                    foreach(var ele2 in sp.Children)
                            if(ele2 is TextBox)
                                    TextBox txt = ele2 as TextBox;
                                    string name = txt.Text;
            string name1 = txtUserName.Text;//直接通过name属性获取控件的Text  
        愚公搬代码
            项目经理 @中国铁塔
           
    粉丝