WPF 模仿 UltraEdit 文件查看器系列一 用户控件

运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-10


章节:

  1. 起步
  2. 添加用户控件

一、起步

打开 VS2019,选创建新项目,就选 WPF 应用(.NET Framework),然后起名创建。

进入后,在 MainWindow.xaml 设计界面(参考 布局),用 xaml (参考 WPF 中的 XAML)来先弄个差不多的界面,先把 Grid 给分行,用鼠标在设计器上分也成,不过我喜欢直接写代码。

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/><!--固定高,放ToolBar-->
<RowDefinition Height="24"/><!--固定高,放一些控制的输入TextBox,比如搜索、跳转等-->
<RowDefinition Height="*"/><!--自动高度,主要的显示界面,放自己写的控件-->
<RowDefinition Height="24"/><!--固定高,放文件名之类的提醒-->
</Grid.RowDefinitions>
</Grid>

接下来继续在</Grid.RowDefinitions> 和</Grid>之间写xaml,放些 ToolBarStackPanel 进一步完善界面

<ToolBar Grid.Row="0">
<Button Name="btnOpen" Content="阅"/>
</ToolBar>
<StackPanel Orientation="Horizontal" Margin="0,2" Grid.Row="1">
<TextBlock Text="跳转至地址"/>
<TextBox Name="txtJumpTo" />
</StackPanel>
<StatusBar Grid.Row="3">
<TextBlock Name="tbkTip"/>
</StatusBar>

出来的界面

有点丑,加点 Style 控制(参见 样式设置和模板化)。可以在 button 里面写,但考虑到还有一些按钮是统一风格的,所以在<Grid>上面一行加个 button 的风格资源。

<Window.Resources>
<Style x:Key="toolbutton" TargetType="Button">
<Setter Property="FontSize" Value="26"/>
<Setter Property="FontFamily" Value="Stliti"/><!--华云隶体-->
<Setter Property="Foreground" Value="Blue"/>
</Style>
</Window.Resources>

然后在 button 的 xaml 描述里加上静态绑定(参见 XAML 资源)。

<ToolBar Grid.Row="0">
<Button Name="btnOpen" Style="{StaticResource toolbutton}" Content="阅"/>
</ToolBar>

修修补补,大致完工后的界面

二、添加用户控件

Grid 的第3栏还空着,用来放以16进制来显示文件内容的控件。没有直接在主项目内摆放,而是选择弄个用户控件,是因为还想着复用,比如我还想弄个内存的查看程序,也用到这个显示界面。不考虑直接弄成单独的调用exe,主要是程序之间的通讯有点复杂,还是直接嵌进项目里好弄。

WPF 的用户控件有两类,一种是自定义控件(参见 各种自定义控件),一种是现成控件的组合。第一种就是继承,然后自己写,很复杂。选简单的第二种。

在 VisualStudio 的菜单上【项目】->【添加新项】里面有两个用户控件,图标很像,仔细看底下的文件名,一个是UserControl1.cs,一个是UserControl1.xaml。选文件后缀名为 xaml 的。改个名叫 HexPanel.xaml,也出来一个设计界面。

在 VisualStudio 右上边有个【解决方案资源管理器】,下面树状列表里的 【HexPanel.xaml】点一下, 出来个【HexPanel.xaml.cs】,再次点击,出来后台的 cs 编辑器。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace HexEdit
{
/// <summary>
/// HexPanel.xaml 的交互逻辑
/// </summary>
public partial class HexPanel : UserControl
{
public HexPanel()
{
InitializeComponent();
}
}
}

点这个出来是因为我想把命名空间 namespace 的 HexEdit 改成自己的 Harlee。改了之后,结果发现

public partial class HexPanel : UserControl
{
public HexPanel()
{
InitializeComponent();
}
}

中的 InitializeComponent(); 出现错误。参考 WPF 中的 XAML,去设计界面 HexPanel.xaml 中,把第一句:
<UserControl x:Class="HexEdit.HexPanel"
改成:
<UserControl x:Class="Harlee.HexPanel"
再把
xmlns:local="clr-namespace:HexEdit"
改成:
xmlns:local="clr-namespace:Harlee" 。

这边没有错误了,下来去主项目 MaiWindow.xaml 中添加。

先添加个命名空间,使得主项目的命名空间为两个:
xmlns:local="clr-namespace:HexEdit"
xmlns:harlee="clr-namespace:Harlee"

再在 Grid 中 添加用户控件 HexPanel
<harlee:HexPanel x:Name="hplShow" Grid.Row="2"/>

至此,用户控件加上了,下来就是编写用户控件 HexPanel 的内容了。(回 导读

WPF 模仿 UltraEdit 文件查看器系列一 用户控件的更多相关文章

  1. WPF 模仿 UltraEdit 文件查看器系列 开篇和导读

    WPF 模仿 UltraEdit 文件查看器系列 开篇和导读 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-10 学 .Net FrameW ...

  2. WPF编游戏系列 之四 用户控件

    原文:WPF编游戏系列 之四 用户控件        在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2. ...

  3. 【WPF学习】第六十四章 构建基本的用户控件

    创建一个简单用户控件是开始自定义控件的好方法.本章主要介绍创建一个基本的颜色拾取器.接下来分析如何将这个控件分解成功能更强大的基于模板的控件. 创建基本的颜色拾取器很容易.然而,创建自定义颜色拾取器仍 ...

  4. 037. asp.netWeb用户控件之五使用用户控件实现文件上传功能

    fileUpload.ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile= ...

  5. WPF窗口和用户控件事件相互触发

    问题1: WPF项目里有一个窗口和一个用户控件,窗口和用户控件里都有一个Button,点击窗口里的Button如何触发用户控件里Button的Click事件 解答: //窗口代码 public par ...

  6. Qt Quick综合实例之文件查看器

    假设你基于Qt SDK 5.3.1来创建一个Qt Quick App项目,项目模板为你准备的main.qml文档的根元素是ApplicationWindow或Window.这次我们就以Applicat ...

  7. 02-IOSCore - NSFileHandle、合并文件、文件指针、文件查看器

    [day0201_NSFileHandle]:文件句柄 1 NSFileHandle 文件对接器.文件句柄 常用API: - (NSData *)readDataToEndOfFile;读取数据到最后 ...

  8. WPF从我炫系列4---装饰控件的用法

    这一节的讲解中,我将为大家介绍WPF装饰控件的用法,主要为大家讲解一下几个控件的用法. ScrollViewer滚动条控件 Border边框控件 ViewBox自由缩放控件 1. ScrollView ...

  9. 《Programming WPF》翻译 第3章 3.内嵌控件

    原文:<Programming WPF>翻译 第3章 3.内嵌控件 WPF提供了一系列内嵌控件.其中大多数符合标准的你已经熟悉的Windows控件类型.注意到没有一个是包装在旧的Win32 ...

随机推荐

  1. 安装APK到android设备那些事儿

    APK是AndroidPackage的缩写,即Android系统的应用软件安装包(apk).APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android模拟器或And ...

  2. 【学术篇】SPOJ GEN Text Generator AC自动机+矩阵快速幂

    还有5天省选才开始点字符串这棵技能树是不是太晚了点... ~题目の传送门~ AC自动机不想讲了QAQ.其实很久以前是学过然后打过板子的, 但也仅限于打过板子了~ 之前莫名其妙学了一个指针版的但是好像不 ...

  3. codeforces1139E Maximize Mex 二分图匹配

    题目传送门 题意:给出n个人,m个社团,每个人都有一个标号,一个能力值,并且属于一个社团,第i天的凌晨,第$k_i$个人会离开.每天每个社团最多派一个人出来参加活动.派出的人的能力值集合为S,求每天$ ...

  4. string::size_type 页73 size_t 页90

    异同点: size_t size_type sizeof(XXX)所得到的结果的类型就是 string类类型和vector类类型定义的类型,string的size操作返回来的是string::size ...

  5. 网络基础之TCP/IP协议族

    一.TCP/IP协议族 1.什么是协议? 计算机与网络设备相互通信依赖于相同的方法,比如,双方通信基于何种语言等.而把通信所依赖的这一切方法统称为规则,而我们就把这种规则称为协议. 协议中存在各种各样 ...

  6. Django之template操作

    一.模板渲染的原理 (一)使用 模板渲染首先有一个模板对象Template,然后有一个上下文对象Context,通过render方法进行渲染,最后返回字符串,render方法的本质还是调用了HttpR ...

  7. javascript表单验证的例子

    function checkUsername(){ //对username的内容进行验证. //要求:首字符是字母或下划线,其他由下划线字母数字组成,共4-20位 var inputOb=docume ...

  8. JCF——工具类

  9. Linux内核知识杂记

    1.内核调试手段 1.printk打印内核状态 2.产生opps时使用GDB查看调用栈 2.内核空间和用户空间区别,通信方式有哪些? Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,L ...

  10. 【前端控件】JQuery datepicker 日期控件设置

    datepicker控件可通过参数设置进行语言切换,以下可实现,系统所有日期控件默认为中文,在特定页面或者特定条件下可切换成英语!~ HTML: <!DOCTYPE html> <h ...