WPF(二)举例讲解WPF布局

来源:互联网 发布:mac 装win10 启动黑屏 编辑:程序博客网 时间:2024/05/16 19:56

WPF(二)举例讲解WPF布局

 

WPF中的控件布局

 

就讲六个控件是杂个用的,包括: Canvas, DockPanel, Grid, StackPanel, WrapPanel, VirtualizingStackPanel

 

1. Canvas :简单地设置坐标值来布局

Canvas很单纯地设置其子控件相对于它的Top, Left, Bottom., Right值来进行定位其子控件.

    例子:

<Canvas>

        <Button Canvas.Top="10" Canvas.Left="10" Content="Canvas 进行 (x,y) 定位(10,10)"  />

</Canvas>

效果图:

2, DockPanel:

    为其子控件提供相对的停靠位置, 包括向左停靠(Dock.Left),向右停靠(Dock.Right),向下停靠(Dock.Bottom),向上停靠.DockPanel 使您在停靠项时,无需担心它们的确切 (x,y) 位置

    例子:

<DockPanel Grid.Column="1" Grid.Row="0">

            <Menu DockPanel.Dock="Top">

                <MenuItem Header="Menu" >

                    <MenuItem Header="open" />

                    <MenuItem Header="save" />

                </MenuItem>

                <MenuItem Header="Edit" />

            </Menu>

            <TreeView>

                <TreeViewItem Header="DockPanel"/>

                <TreeViewItem Header="香港电影">

                    <TreeViewItem Header="无间道" />

                    <TreeViewItem Header="伤城" />

                    <TreeViewItem Header="和平饭店" />

                    <TreeViewItem Header="阿郎的故事" />

                    <TreeViewItem Header="秋天的童话" />

                    <TreeViewItem Header="赌神" />

                </TreeViewItem>

                <TreeViewItem Header="欧美电影"/>

            </TreeView>

            <ListBox>

                <ListBoxItem>DockPanel 使您在停靠项时</ListBoxItem>

                <ListBoxItem>无需担心它们的确切 (x,y) 位置</ListBoxItem>

                <ListBoxItem>listBoxItem</ListBoxItem>

            </ListBox>

        </DockPanel>

效果图:

3. Grid:表格布局

Grid允许我们通过自定义行列来进行布局,主要作用就是画格格,网格定位.

通过设置ColumnsRows的属性,通过定义GridColumnDifinitionsRowDifinitions来实现对于表格的定义,然后根据Grid.ColumnGrid.Row的对象来制定位置的方式实现布局.

例子:

<Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="*"/>

            <RowDefinition Height="*"/>

            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="*"/>

            <ColumnDefinition Width="*"/>

            <ColumnDefinition Width="*"/>

        </Grid.ColumnDefinitions>

        <Button x:Name="panel1" Grid.Row="0" Grid.Column="1" Background="Red"></Button>

        <Button x:Name="panel2" Grid.Row="1" Grid.Column="0" Background="Red"></Button>

        <Button x:Name="panel3" Grid.Row="1" Grid.Column="2" Background="Red"></Button>

        <Button x:Name="panel4" Grid.Row="2" Grid.Column="1" Background="Red"></Button>

        <Button x:Name="panel5" Grid.Row="1" Grid.Column="1" Content="Grid画格格"></Button>

        <Button x:Name="panel6" Grid.Row="0" Grid.Column="0" Content="网格定位"></Button>

</Grid>

效果图:

4. StackPanel :按照水平线方向或垂直线方向排列控件

     StackPanel允许你按照指定的方向其中添加子控件

    Orientation=" Horizontal"表示纵向

    Orientation="Vertical"表示横向

    例子:

    <StackPanel Orientation="Horizontal" Background="silver" Margin="20">

            <!--Orientation="Vertical"表示纵向-->

            <Label Margin="5" Content="提供一个" />

            <TextBox Margin="5" Text="从左至右" BorderBrush="Blue" Foreground="Black" Width="100"/>

            <Button Name="test" Width="100" Height="50" Content="或从上至下"/>

            <Button  Content="放置内容的堆栈模型"/>

            <Label Name="testlabel"  Content="!"/>

        </StackPanel>

效果图:

5. WrapPanel: 自动换行子控件的布局

    WrapPanel 模型是资源管理器窗口的右侧窗格,使您可以处理在当前行已满之后流入新行中的项。

    例子:

    <WrapPanel Background="Silver" Margin="40">

            <Button /> <Button /> <Button /> <Button /> <Button /> <Button /> <Button />

            <Button /> <Button /> <Button /> <Button /> <Button /> <Button /> <Button />

            <Button /> <Button /> <Button /> <Button /> <Button /> <Button /> <Button />

            <Button /> <Button /> <Button /> <Button /> <Button /> <Button /> <Button />

        </WrapPanel>

    效果图:

(小块块就是Button

6. VirtualizingStackPanel

    可视化是一种改善数据密集型应用程序性能的很好方式。可通过VirtualizingStackPanel控件获得 WPF 中的 UI 可视化。对于大量的项而言,这要比 StackPanel 70 倍。

    我们在加载字体列表时可能会遇到了一个让人崩溃的问题:由于系统字体可能较多(可能有好几百项),导致使用ComboBox显示字体列表异常缓慢,这是由于ComboBox在展开列表时绘制了列表中的每一项,为了避免这个问题,我们可以使用 VirtualizingStackPanel来代替ComboBox默认的项目面板StackPanel

然后速度就很快了,与仅仅加载少量项目速度一样快,因为其只绘制了当前被显示的项。

    例子:

    <Grid>   

        <ComboBox x:Name="comboboxFontList1" VerticalAlignment="Top">

            <ComboBox x:Name="comboboxFontList2" VerticalAlignment="Top">

                <ComboBox.ItemsPanel>

                    <ItemsPanelTemplate>

                        <VirtualizingStackPanel />

                    </ItemsPanelTemplate>

                </ComboBox.ItemsPanel>

            </ComboBox>

        </ComboBox>

</Grid>

效果图:就是ComboBox里面夹ComboBox

原创粉丝点击