WPF-布局样式练习-Day01

简介: WPF-布局样式练习-Day01

一、前言

WPF日常布局样式练习案例,记录自己在WPF的复习过程中的亿点点进步,同时分享出来,希望对学习WPF的读者们,提供一点帮助。

二、模仿

2.1 原始设计图

2.2 模仿分析

此处使用的工具为PxCook,需要注意的是,此处标注的是像素点,而默认情况下,WPF是相对范围内的像素无关,模仿阶段,不考虑到像素级别的模仿细节处理,后续文章会单独讲解。

2.3 动起来

1)系统资源

<Window.Resources>
        <GeometryGroup x:Key="shishi"></GeometryGroup>
        <GeometryGroup x:Key="bingren"></GeometryGroup>
        <GeometryGroup x:Key="chuangwei"></GeometryGroup>
        <GeometryGroup x:Key="yihu"></GeometryGroup>
        <GeometryGroup x:Key="baobiao"></GeometryGroup>
        <GeometryGroup x:Key="shebei"></GeometryGroup>
        <GeometryGroup x:Key="xitong"></GeometryGroup>
        <!--#region ListViewItem 模板 -->
        <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type ListViewItem}">
            <!--需要给根容器添加背景色用于捕获事件-->
            <Grid Background="Transparent" SnapsToDevicePixels="True">
                <Border x:Name="Bg" Background="{TemplateBinding Background}"></Border>
                <Border Padding="{TemplateBinding Padding}">
                    <StackPanel Orientation="Horizontal" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                        <Path Fill="{TemplateBinding Foreground}" Stretch="Uniform" Width="12.8" Height="12.8"
                                           Margin="11.2,12.8" Data="{TemplateBinding local:ControlExtensions.Data}">
                        </Path>
                        <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"></ContentPresenter>
                    </StackPanel>
                </Border>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="ListViewItem.IsSelected" Value="True">
                    <Setter Property="Background" TargetName="Bg" Value="#50BEE9D4"></Setter>
                    <Setter Property="BorderBrush" TargetName="Bg" Value="#1EA64A"></Setter>
                    <Setter Property="BorderThickness" TargetName="Bg" Value="0,0,4,0"></Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <!--#endregion-->
        <!--#region ListViewItem默认样式 -->
        <Style TargetType="ListViewItem">
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="Padding" Value="30.4,0"/>
            <Setter Property="FontSize" Value="12.8"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="HorizontalContentAlignment" Value="Left"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="local:ControlExtensions.Data" Value="{StaticResource shishi}"/>
            <Setter Property="Template" Value="{StaticResource ButtonTemplate}"/>
            <Style.Triggers>
                <Trigger Property="ListViewItem.IsSelected" Value="True">
                    <Setter Property="Foreground" Value="#11B15F"/>
                    <Setter Property="Background" Value="#50BEE9D4"/>
                    <Setter Property="FontWeight" Value="Bold"/>
                </Trigger>
            </Style.Triggers>
        </Style>
        <!--#endregion-->
    </Window.Resources>

2)设置布局

<!--整体布局-->
    <DockPanel>
        <Border DockPanel.Dock="Left" Grid.ColumnSpan="2" Width="164" Background="White">
            <Border.Effect>
                <DropShadowEffect BlurRadius="20" Direction="20" Color="#eef4fa" ShadowDepth="10" Opacity="0.8" RenderingBias="Quality"></DropShadowEffect>
            </Border.Effect>
            <StackPanel>
                <!--显示内容-->
                <StackPanel HorizontalAlignment="Center" Margin="0,41.6,0,0">
                </StackPanel>
                <!--#region 侧面菜单 -->
                <!--#endregion-->
            </StackPanel>
        </Border>
        <!--右侧内容-->
        <DockPanel>
            <StackPanel DockPanel.Dock="Top" Background="White" Margin="3.2,0,0,0">
                <!--#region 右侧顶部导航内容 -->
                <Border BorderBrush="#f1f2f3" Padding="0,20.8,1.6,12.8" Margin="17.6,0,0,0" BorderThickness="0,0,0,1">
                    <WrapPanel>
                        <!--右侧顶部导航内容-->
                    </WrapPanel>
                </Border>
                <!--#endregion-->
                <Border Height="52.8" Padding="17.6,12.8,0,0">
                    <DockPanel>
                        <StackPanel Orientation="Horizontal" DockPanel.Dock="Right">
                            <!--#region 显示按钮 -->
                            <!--#endregion-->
                        </StackPanel>
                        <TextBlock Text="患者体温监测数据详情" Foreground="Black" FontWeight="Black" FontSize="16"></TextBlock>
                    </DockPanel>
                </Border>
            </StackPanel>
            <Border Padding="19.2,19.2,19.2,38.4">
                <DockPanel>
                    <!--#region 患者基本信息 -->
                    <Border DockPanel.Dock="Left" Width="210" HorizontalAlignment="Left" Background="White" CornerRadius="5" Padding="16">
                        <Border.Effect>
                            <DropShadowEffect BlurRadius="20" Direction="20" Color="#eef4fa" ShadowDepth="0" Opacity="0.8" RenderingBias="Quality"></DropShadowEffect>
                        </Border.Effect>
                    </Border>
                    <!--#endregion-->
                    <!--#region 历史体温数据 -->
                    <Border Width="260" DockPanel.Dock="Right" 
                            HorizontalAlignment="Right" 
                            Background="White" CornerRadius="5" Padding="16">
                        <Border.Effect>
                            <DropShadowEffect BlurRadius="20" Direction="20" Color="#eef4fa" ShadowDepth="0" Opacity="0.8" RenderingBias="Quality"></DropShadowEffect>
                        </Border.Effect>
                    </Border>
                    <!--#endregion-->
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="14*"></RowDefinition>
                            <RowDefinition Height="9*"></RowDefinition>
                        </Grid.RowDefinitions>
                        <!--#region 体温监测详情 -->
                        <Border Background="White" CornerRadius="5" Padding="16" Margin="16,0,16,8">
                            <Border.Effect>
                                <DropShadowEffect BlurRadius="20" Direction="20" Color="#eef4fa" ShadowDepth="0" Opacity="0.8" RenderingBias="Quality"></DropShadowEffect>
                            </Border.Effect>
                        </Border>
                        <!--#endregion-->
                        <!--#region 历史体温数据 -->
                        <Border Grid.Row="1" Background="White" CornerRadius="5" Padding="16" Margin="16,8,16,0">
                            <Border.Effect>
                                <DropShadowEffect BlurRadius="20" Direction="20" Color="#eef4fa" ShadowDepth="0" Opacity="0.8" RenderingBias="Quality"></DropShadowEffect>
                            </Border.Effect>
                        </Border>
                        <!--#endregion-->
                    </Grid>
                </DockPanel>                
            </Border>
        </DockPanel>
    </DockPanel>

3)左侧内容

显示内容
<StackPanel HorizontalAlignment="Center" Margin="0,41.6,0,0">
    <TextBlock Text="15:36:06" DockPanel.Dock="Top" FontSize="24" FontWeight="Bold" Foreground="Black" HorizontalAlignment="Center"></TextBlock>
    <TextBlock Text="2020年5月20日 星期三" Margin="0,12.8" HorizontalAlignment="Center" Foreground="LightGray"/>
</StackPanel>
侧面菜单
<!--#region 侧面菜单 -->
<ListView SelectedIndex="0" BorderThickness="0">
    <ListViewItem local:ControlExtensions.Data="{StaticResource bingren}" Content="病人管理"/>
    <ListViewItem local:ControlExtensions.Data="{StaticResource chuangwei}" Content="床位管理"/>
    <ListViewItem local:ControlExtensions.Data="{StaticResource yihu}" Content="医护管理"/>
    <ListViewItem local:ControlExtensions.Data="{StaticResource baobiao}" Content="报表管理"/>
    <ListViewItem local:ControlExtensions.Data="{StaticResource shebei}" Content="设备管理"/>
    <ListViewItem local:ControlExtensions.Data="{StaticResource xitong}" Content="系统设置"/>
    <ListView.Template>
        <ControlTemplate>
            <ItemsPresenter></ItemsPresenter>
        </ControlTemplate>
    </ListView.Template>
</ListView>

4)右侧内容

右侧顶部导航
<!--#region 右侧顶部导航内容 -->
<Border BorderBrush="#f1f2f3" Padding="0,20.8,1.6,12.8" Margin="17.6,0,0,0" BorderThickness="0,0,0,1">
    <WrapPanel>
        <!--右侧顶部导航内容-->
        <TextBlock Text="实时检测"></TextBlock>
        <TextBlock Text=" / "></TextBlock>
        <TextBlock Text="体温数据详情页" Foreground="#11B15F" FontWeight="Black"></TextBlock>
    </WrapPanel>
</Border>
<!--#endregion-->
显示按钮
<StackPanel Orientation="Horizontal" DockPanel.Dock="Right">
    <!--#region 显示按钮 -->
    <Button Content="解绑" Width="49.6" Padding="12.8,6.4" Margin="0,0,12.8,0" FontSize="10" VerticalAlignment="Top">
                                <Button.Template>
                                    <ControlTemplate TargetType="Button">
                                        <Border BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="5" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
                                            <ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter>
                                        </Border>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>
    <Button Content="导出" Width="49.6" Padding="12.8,6.4" Margin="0,0,12.8,0" 
                                    FontSize="10" 
                                    Background="#1EA64A" 
                                    BorderThickness="0"
                                    Foreground="White" VerticalAlignment="Top">
                                <Button.Template>
                                    <ControlTemplate TargetType="Button">
                                        <Border BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="5" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
                                            <ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter>
                                        </Border>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>
    <!--#endregion-->
</StackPanel>
面板展示

对于右侧的内容展示板,此处基本布局一致,统一如下,依据实际情况对Border的属性Padding、DockPanel.Dock、Width 、HorizontalAlignment进行调整即可。

<!--#region 患者基本信息 -->
<Border Background="White" CornerRadius="5">
    <Border.Effect>
        <DropShadowEffect BlurRadius="20" Direction="20" Color="#eef4fa" ShadowDepth="0" Opacity="0.8" RenderingBias="Quality"></DropShadowEffect>
    </Border.Effect>
    <DockPanel>
        <Border DockPanel.Dock="Top" Padding="0,0,0,10" BorderBrush="#f1f2f3" BorderThickness="0,0,0,1">
            <TextBlock Text="患者基本信息" FontWeight="Black" FontSize="14" Foreground="Black"></TextBlock>
        </Border>
        <ContentControl></ContentControl>
    </DockPanel>
</Border>
<!--#endregion-->

三、效果展示

需要对应源码,可以私信笔者,发送内容WPFDay1



相关文章
WPF疑难问题之Treeview中HierarchicalDataTemplate多级样式
WPF疑难问题之Treeview中HierarchicalDataTemplate多级样式
397 0
|
4月前
|
C# UED 开发者
WPF与性能优化:掌握这些核心技巧,让你的应用从卡顿到丝滑,彻底告别延迟,实现响应速度质的飞跃——从布局到动画全面剖析与实例演示
【8月更文挑战第31天】本文通过对比优化前后的方法,详细探讨了提升WPF应用响应速度的策略。文章首先分析了常见的性能瓶颈,如复杂的XAML布局、耗时的事件处理、不当的数据绑定及繁重的动画效果。接着,通过具体示例展示了如何简化XAML结构、使用后台线程处理事件、调整数据绑定设置以及利用DirectX优化动画,从而有效提升应用性能。通过这些优化措施,WPF应用将更加流畅,用户体验也将得到显著改善。
300 1
|
4月前
|
开发者 C# 存储
WPF开发者必读:资源字典应用秘籍,轻松实现样式与模板共享,让你的WPF应用更上一层楼!
【8月更文挑战第31天】在WPF开发中,资源字典是一种强大的工具,用于共享样式、模板、图像等资源,提高了应用的可维护性和可扩展性。本文介绍了资源字典的基础知识、创建方法及最佳实践,并通过示例展示了如何在项目中有效利用资源字典,实现资源的重用和动态绑定。
114 0
|
4月前
|
开发者 C# Windows
WPF布局大揭秘:掌握布局技巧,轻松创建响应式用户界面,让你的应用程序更上一层楼!
【8月更文挑战第31天】在现代软件开发中,响应式用户界面至关重要。WPF(Windows Presentation Foundation)作为.NET框架的一部分,提供了丰富的布局控件和机制,便于创建可自动调整的UI。本文介绍WPF布局的基础概念与实现方法,包括`StackPanel`、`DockPanel`、`Grid`等控件的使用,并通过示例代码展示如何构建响应式布局。了解这些技巧有助于开发者优化用户体验,适应不同设备和屏幕尺寸。
121 0
|
4月前
|
开发者 C# 存储
WPF开发者必读:样式与模板的艺术,轻松定制UI外观,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,样式与模板是实现美观界面与一致性的关键工具。样式定义了控件如字体、颜色等属性,而模板则允许自定义控件布局与子控件,两者均可存储于`.xaml`文件中。本文介绍了样式与模板的基础知识,通过示例展示了如何创建并应用它们来改变按钮的外观,从而提升用户体验。
102 0
|
4月前
|
存储 前端开发 C#
WPF/C#:更改界面的样式
WPF/C#:更改界面的样式
48 0
WPF-布局样式练习-Day02-聊天气泡
WPF-布局样式练习-Day02-聊天气泡
261 1
|
7月前
|
前端开发 C# 索引
浅谈WPF之UI布局
一个成功的软件,离不开人性化的UI设计,如何抓住用户第一视觉,让用户产生依赖感,合适优雅的布局必不可少。本文以一些简单的小例子,简述WPF中布局 面板 控件的使用,仅供学习分享使用,如有不足之处,还请指正。
105 1
|
7月前
|
C#
浅谈WPF之样式与资源
WPF通过样式,不仅可以方便的设置控件元素的展示方式,给用户呈现多样化的体验,还简化配置,避免重复设置元素的属性,以达到节约成本,提高工作效率的目的,样式也是资源的一种表现形式。本文以一个简单的小例子,简述如何设置WPF的样式以及资源的应用,仅供学习分享使用,如有不足之处,还请指正。
137 0
|
前端开发 C# 容器
WPF技术之控件布局
WPF提供了多种布局控件和技术,可以帮助开发人员轻松创建灵活的用户界面。
182 0
WPF技术之控件布局