C# WPF 开源主题 HandyControl 的使用(一)

HandyControl是一套WPF控件库,它几乎重写了所有原生样式,同时包含80余款自定义控件(正逐步增加),下面我们开始使用。

1、准备

1.1 创建项目

C# WPF应用(.NET Framework)创建项目

1.2 添加包

1.3 在App.xaml中引用HandyControl的皮肤和主题:

cs 复制代码
<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</Application.Resources>

1.4 窗体文件xaml添加引用

xmlns:hc="https://handyorg.github.io/handycontrol"

2、窗体

2.1 改Window为hc:Window

cs 复制代码
<hc:Window x:Class="HandyControlTest.MainWindow"
        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:hc="https://handyorg.github.io/handycontrol"
        xmlns:local="clr-namespace:HandyControlTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        
    </Grid>
</hc:Window>

2.2 修改窗体的xaml.cs文件

修改窗体类名,否则报错:"分部声明一定不能指定不同的基类"

public partial class MainWindow : Window

public partial class MainWindow : HandyControl.Controls.Window

2.3 扩展属性

2.4 代码修改

cs 复制代码
CloseButtonBackground="Blue" CloseButtonForeground="White"
CloseButtonHoverBackground="Red" CloseButtonHoverForeground="Black"
OtherButtonBackground="Green" OtherButtonForeground="White"
OtherButtonHoverBackground="Yellow" OtherButtonHoverForeground="Black"

2.5 运行结果

2.6 其它参数

NonClientAreaBackground用来设置了标题栏的背景色。NonClientAreaForeground用来设置标题栏的前景色,不仅仅可以用来设置标题的前景色,也可以设置NonClientAreaContent中控件的默认前景色。NonClientAreaHeight用来设置标题栏的高度。下面看一段代码:

cs 复制代码
<hc:Window x:Class="TestDemo.View.WindowTest"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:hc="https://handyorg.github.io/handycontrol"
        Title="WindowTest" Height="200" Width="400"
        NonClientAreaBackground ="LightBlue" NonClientAreaForeground="Red"
        NonClientAreaHeight="100">
    <hc:Window.NonClientAreaContent >
        <Border BorderThickness="1" BorderBrush="Black">
            <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
                <Button Margin="5,0,0,0" Content="登录"/>
                <TextBlock Text="服务未连接" VerticalAlignment="Center" Margin="5,0,0,0" />
            </StackPanel>
        </Border>
    </hc:Window.NonClientAreaContent>
</hc:Window>

运行效果:

3、 按钮

3.1 代码

cs 复制代码
<Grid>
        <StackPanel Orientation="Vertical">
            <StackPanel Orientation="Horizontal">
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonBaseBaseStyle}" Foreground="Black" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonDanger}" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonDashedDanger}" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonDashedInfo}" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonInfo}" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonPrimary}" />
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonWarning}" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonSuccess}" />
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonSuccess}" 
                        hc:BorderElement.CornerRadius="15"/>
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonDanger.Small}" />
                <Button Margin="10,10" Width="45"
                        Style="{StaticResource ButtonIcon}" 
                        hc:IconElement.Geometry="{StaticResource AddGeometry}"
                        Foreground="Green"/>
                <Button Margin="10,10" Width="45"
                        Style="{StaticResource ButtonIcon}" 
                        hc:IconElement.Geometry="{StaticResource RemoveGeometry}"
                        Foreground="Green"/>
                <Button Margin="10,10" Width="45" Height="45"
                        Style="{StaticResource ButtonIcon}" 
                        hc:IconElement.Geometry="{StaticResource SuccessGeometry}"
                        Foreground="White"
                        Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                <Button Content="按钮" Margin="10,10" Width="75"
                        Style="{StaticResource ButtonWarning}" 
                        hc:IconElement.Geometry="{StaticResource SuccessGeometry}"
                        Foreground="Black"/>
            </StackPanel>
        </StackPanel>
</Grid>

3.2 运行效果

相关推荐
唐青枫7 小时前
C#.NET 定时任务与队列利器:Hangfire 完整教程
c#·.net
hez201013 小时前
Runtime Async - 步入高性能异步时代
c#·.net·.net core·clr
mudtools1 天前
.NET驾驭Word之力:玩转文本与格式
c#·.net
唐青枫1 天前
C#.NET 数据库开发提速秘籍:SqlSugar 实战详解
c#·.net
mudtools2 天前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
大飞pkz2 天前
【设计模式】C#反射实现抽象工厂模式
设计模式·c#·抽象工厂模式·c#反射·c#反射实现抽象工厂模式
每天回答3个问题2 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5