WPF小知识 - 技巧合集

WPF文本布局和换行逻辑详解 对于复杂的文本布局需求,WPF还允许开发人员自定义换行逻辑。在WPF中,换行逻辑由类和类提供支持。// 创建一个TextFormatter对象// 创建一个TextSource对象,用于提供文本内容// 使用TextFormatter进行文本布局// 设置文本布局范围// 循环处理每一行文本// 获取下一行的TextLine// 绘制文本行// 更新文本位置break;在上面的示例中,我们首先创建了一个自定义的TextSource对象,用于提供文本内容。然后,我们使用。 阅读详情

在编写WPF程序遇到一些小问题,所以记录起来,查其他方便。
我的所有技巧合集文章都会不定期更新里面的内容,对一些小的知识点和技巧进行更新。

在这里插入图片描述

Label自动换行

网上搜的都不能自动换行,发现使用Run 就可以。在脚本中直接调用labTip.Text进行赋值就可以了。

<Label Foreground="#FF9E9E9E" FontSize="16" Margin="33,398,212,48" >
    <TextBlock TextWrapping="Wrap" Margin="0 10 0 10" ><Run Name="labTip" Text="x"/></TextBlock>
</Label>

在ToDesk远控下无法显示界面

可以关闭硬件加速,在窗体的Loaded后执行下面的代码。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var hwnd_source = (System.Windows.Interop.HwndSource)PresentationSource.FromVisual(this);
    var hwnd_target = hwnd_source.CompositionTarget;
    hwnd_target.RenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
}

弹出窗口在主窗口中心

//弹出
RuleSetting ruleWin = new RuleSetting();
ruleWin.SelectOneRule(listRuleInfo[index], index);
ruleWin.ShowDialog();
//初始化位置
public RuleSetting()
{
    InitializeComponent();
    MainWindow mainWindow = (MainWindow)Application.Current.MainWindow;
    this.Top =  mainWindow.Top + (mainWindow.Height - Height) / 2 ;
    this.Left = mainWindow.Left + (mainWindow.Width - Width) / 2;
}

设置FlowDocument页面的内容边界大小

通过设置PagePadding来实现

PagePadding=15
PagePadding=5

<FlowDocumentScrollViewer Grid.Row="1">
    <FlowDocument x:Name="tbConsole" Background="#FFC2C2C2" PagePadding="5">
    </FlowDocument>
</FlowDocumentScrollViewer>

给List添加弹出菜单

如果是Listview就改成ListView.ContextMenu

<ListBox Grid.Row="0" x:Name="lbServers"  d:ItemsSource="{d:SampleData ItemCount=5}" SelectionChanged="lbServers_Selected">
    <ListBox.ContextMenu>
        <ContextMenu>
            <MenuItem Name="MenuItemRuleDel" Header="删除选中"  Click="OnRuleMenuClick"/>
            <MenuItem Name="MenuItemRuleDelAll" Header="删除所有"  Click="OnRuleMenuClick"/>
        </ContextMenu>
    </ListBox.ContextMenu>
</ListBox>
//右键菜单点击
private void OnRuleMenuClick(object sender, RoutedEventArgs e)
{
    string menuname = ((MenuItem)sender).Name;
    int index = lbServers.SelectedIndex;

    switch (menuname)
    {
        case "MenuItemRuleDel":
            if (index == -1)
                return;
            DeleteRule(index);
            break;
        case "MenuItemRuleDelAll":
            if (index == -1)
                return;
            ReadyEditRule(index);
            break;
    }
}

添加状态栏

<DockPanel Grid.Row="2">
    <StatusBar DockPanel.Dock="Bottom">
        <StatusBarItem>
            <TextBlock Name="tbStat" Text="xxxxxx" />
        </StatusBarItem>
    </StatusBar>
</DockPanel>

Image更换内部图片

在xaml中直接可以通过source来显示:

<Image x:Name="imgNetstat"  Source="/pic/wifi_0.png"/>

后台脚本可以:

imgNetstat.Source = new BitmapImage(new Uri("pack://application:,,,/pic/wifi_1.png"));

这里要把图片属性里的生成操作改为资源(Resource),如下图:
在这里插入图片描述

子线程访问主线程里的组件

子线程调用主线程组件imgNetstat的更换图片

void OnConnetClose()
{
    imgNetstat.Dispatcher.Invoke(new Action(() => {
        imgNetstat.Source = new BitmapImage(new Uri("pack://application:,,,/pic/wifi_2.png"));
    }));
}

Label多重绑定

<Label>
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0}({1})">
                <Binding Path="scenename"/>
                <Binding Path="passtime"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Label>

设置图片的高度是另外一个组件的高度

可以直接输入

Height="{Binding ElementName=printCanvas ,Path=Height}"

完整的如下:

<Canvas x:Name="printCanvas" Width="268" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Image x:Name="imgQR2"  Source="1.png" Stretch="UniformToFill" Height="{Binding ElementName=printCanvas ,Path=Height}"></Image>
   
</Canvas>

打印Canvas

<DockPanel Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top">
    <!--<Button x:Name="btntest" Width="90" Height="90" Focusable ="False"  Click="testClick" FontSize="24"  >test</Button>-->
    
    <Canvas x:Name="printCanvas" Width="265" Height="190" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="3" Visibility="Hidden" >
        <DockPanel Canvas.Left="3" >
            <Border BorderBrush="#ff6600" BorderThickness="2" Margin="5">
                <Image x:Name="imgQR" Stretch="UniformToFill" Height="65" MouseDown="imgQR_MouseDown"></Image>
            </Border>
            <Grid Height="{Binding ElementName=printCanvas ,Path=Height}" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="55"></RowDefinition>
                    <RowDefinition Height="25"></RowDefinition>
                </Grid.RowDefinitions>
                <Label Grid.Row="0" x:Name="tbPrintName" FontSize="26" VerticalContentAlignment="Top">TEST测试</Label>
                <Label Grid.Row="1" Canvas.Top="10" FontSize="12" VerticalContentAlignment="Center">你的名字</Label>
            </Grid>
            
        </DockPanel>
    </Canvas>
    
</DockPanel>

打印的代码

PrintDialog dlg = new PrintDialog();
dlg.PrintTicket.PageMediaSize = new PageMediaSize(70 / 25.4 * 96, 50 / 25.4 * 96); // 以英寸为单位设置
var sz = new Size(printCanvas.Width, printCanvas.Height);
printCanvas.Measure(sz);
var sz2 = sz;
sz2.Width = sz.Width +6;
sz2.Height = sz.Height + 6;
printCanvas.Arrange(new Rect(new System.Windows.Point(6, 6), sz2));

dlg.PrintVisual(printCanvas, "打印 - " + tbPrintName.Content);

Canvas的大小是265x190,是因为我的标签打印机纸张是70mm*50的。
需要根据dpi换算成像素 ,
将 毫米 转换为 英寸:
70mm÷25.4mm/inch=2.7559inch

将 英寸 转换为 像素(假设分辨率为 96 DPI):
2.7559inch×96px/inch=264px

WPF技术深度解析与实战书籍合集 WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows客户端应用程序的用户界面框架。其主要特点在于使用XAML(可扩展应用程序标记语言)进行界面布局,以及使用DirectX进行图形渲染,这为开发者提供了丰富的视觉效果和复杂的用户界面。WPF不仅提供了丰富的内置控件,还支持创建自定义控件来满足特定的需求。创建自定义控件涉及到继承现有的控件类,并重写或添加新的功能。例如,可以创建一个继承自的控件,并在其中使用Canvas进行绘图。 阅读详情

相关推荐

WPF特效开发合集源码实战

WPF(Windows Presentation Foundation)作为微软新一代的UI开发框架,不仅提供了丰富的控件库,还支持强大的图形渲染和动画控制能力。其基于 DirectX 的渲染引擎,使得开发者可以轻松实现复杂的视觉效果与交互体验。本章将从整体上介绍WPF特效开发的基本概念、技术架构以及应用场景,涵盖XAML与C#代码协同开发的机制,帮助读者建立对WPF特效体系的全面认知,为后续深入学习打下坚实基础。为了提高代码的可维护性和复用性,WPF支持将动画资源定义在资源字典中,并通过或。

weixin_42355400的博客 1147

WPF Label内容自动换行和强制换行

如果在WPF Label里面的字符串太长,想让它自动换行,可以用TextBlock实现 <Label MaxWidth="550"> <TextBlock TextWrapping="Wrap" Text="在此输入要换行的文字,前提是它足够长,并且Label的MaxWidth不足以让它一行显示。" /> </Label> 如果想在长字符串的某个位置强制...

遥远的心 2万+

实现label文字以指定长度自动换行

系统自带的label不能自动换行,使用较不便,因此写了这个程序,实现了label的自动换行,其中有例子,在此与大家分享

wpf标签里面换行,空格

wpf标签里面换行,空格。

u011511086的专栏 2329

【转载】参数估计(Parameter Estimation):频率学派(最大似然估计MLE、最大后验估计MAP)与贝叶斯学派(贝叶斯估计BPE)

基础 频率学派与贝叶斯学派 http://www.douban.com/group/topic/16719644/ http://www.zhihu.com/question/20587681 最大似然估计(Maximum likelihood estimation,MLE) http://baike.baidu.com/view/1918804.htm http://baike.baidu.co

影 的专栏 3413

城市规划师必备:ArcMap里用这个免费工具,5步完成建筑群通风廊道分析

本文介绍了城市规划中利用ArcMap进行建筑群通风廊道分析的高效方法,重点讲解了迎风面投影指数(FAI)的应用。通过5个步骤,从数据准备到规划应用,帮助规划师快速评估城市通风潜力,优化建筑布局,提升城市风环境质量。

weixin_26800111的博客 412

WPF 实现label换行

Label MaxWidth="550">TextBlock TextWrapping="Wrap"Text="在此输入要换行的文字,前提是它足够长,并且Label的MaxWidth不足以让它一行显示。" />Label>

hustypf的专栏 3万+

基于开源项目构建 CFS(网络靶场实战演练)平台

摘要:构建CFS网络靶场可使用多个开源组件组合,包括EVE-NG/GNS3或ContainerLab构建网络环境,Kasm提供工作空间,CALDERA+Atomic Red Team实现攻击模拟,DetectionLab建立防御环境,Malcolm/Arkime进行流量监控,CyRIS提供编排框架,Vulhub/DVWA创建漏洞靶标。关键在于通过API深度集成各组件,同时需注重安全隔离、资源规划及维护成本。建议开发统一管理平台,结合Ansible/Terraform实现自动化部署,打造定制化实战演练环境。(

深山技术宅的博客 1851

WPF优秀开源代码合集

WPF优秀开源代码合集 【下载地址】WPF优秀开源代码合集 本仓库汇集了多个WPF(Windows Presentation Foundation)优秀开源项目,涵盖MVVM框架、日期时间选择器、数据可视化、Office风格UI、图形绘制及3D图形库等领域。这些资源旨在帮助开发者快速掌握WPF开发技巧,提升效率。无论是构...

gitblog_06733的博客 778

【UE5 C++开发指南】从零配置Visual Studio 2022开发环境

本文详细指导如何从零开始为UE5 C++开发配置Visual Studio 2022环境。文章强调了VS2022与UE5的深度兼容性,并逐步讲解了社区版下载、核心工作负载(如“使用C++的游戏开发”)与组件安装、界面优化、专属工具设置以及首个C++项目的创建与验证流程,帮助开发者高效搭建专业开发环境。

weixin_29016865的博客 395

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL)

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL),xfce桌面美化、安装google-chrome

NiKoJJ‘s Blog 1万+

WPF动画效果合集

WPF动画效果合集 【下载地址】WPF动画效果合集 WPF动画效果合集本仓库提供了一个包含多个WPF动画效果的项目合集,适用于希望在WPF应用程序中添加动态效果的开发者 项目地址: https://gitcode.com/open...

gitblog_09712的博客 394

使用亚组分析进行子组分析并可视化森林图 - R语言

通过亚组分析和森林图的结合,我们可以更好地理解不同子组之间的差异和效果大小。当然,在实际应用中,还需要考虑多种因素,如样本量、异质性等,以得到更准确的结果和结论。每个森林图中的水平线代表了每个子组的效应估计,线的长度表示了该效应估计的置信区间。假设我们有一个包含研究对象的数据框(data frame),其中包括了治疗组和对照组的结果数据,以及一些可能的影响因素作为调整变量。在本例中,我们将比较两种不同的治疗方法(A和B)对结果变量的影响,并调整了一个额外的变量。是结果变量和对照组变量的列名。

2301_79326857的博客 1237

推荐文章:探索WPF界面设计的新境界 —— “WPF界面设计合集”

推荐文章:探索WPF界面设计的新境界 —— “WPF界面设计合集” 【下载地址】WPF界面设计合集 WPF界面设计合集 项目地址: https://gitcode.com/open-source-toolkit/b70bb ...

gitblog_09744的博客 850

【AIGC】大模型面试高频考点07-注意力(Attention)篇

AIGC面试高频考点

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3363

Python爬虫实战:利用Scrapy+Playwright高效爬取TED演讲数据

在当今信息爆炸的时代,TED演讲作为全球知名的思想传播平台,汇聚了各领域顶尖人才的精彩分享。对于数据分析师、研究人员或内容创作者来说,获取TED演讲的完整数据集具有重要价值。本文将详细介绍如何使用Python中最先进的爬虫技术组合——Scrapy框架配合Playwright浏览器自动化工具,高效爬取TED演讲的完整数据。传统爬虫技术在处理现代动态网页时面临诸多挑战,而本文将展示如何利用最新工具解决这些问题。

2201_76125261的博客 206

WPF动画效果合集:为你的应用程序增添动态魅力

WPF动画效果合集:为你的应用程序增添动态魅力 【下载地址】WPF动画效果合集 WPF动画效果合集本仓库提供了一个包含多个WPF动画效果的项目合集,适用于希望在WPF应用程序中添加动态效果的开发者 项目地址: https://gi...

gitblog_09748的博客 758

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【亲测免费】 WPF界面设计合集

WPF界面设计合集 【下载地址】WPF界面设计合集 WPF界面设计合集 项目地址: https://gitcode.com/open-source-toolkit/b70bb ...

gitblog_09707的博客 677

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WPF源码合集介绍

WPF源码合集介绍 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到WPF源码合集资源库!这里为您提供了一大批精心整理的WPF(Windows Presentation Foundation)源码实例,非常适合初学者学习和研究。 资源描述 本资源集包含多种实用的WPF源码实例,内容涵盖了基础知识到高级应用的各个方面。无论是刚开始接触WPF的开发者,还是希望进阶提高的开发者...

gitblog_06726的博客 426

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

关于WPF界面框架合集

关于WPF界面框架合集 置顶leo.kong2018-10-31 17:43:1619728收藏36 分类专栏:WPF之metro使用文章标签:WPF 框架 WPF界面设计 版权 #关于WPF界面框架MahApps.Metro学习笔记《一》 公司因为业务发展,需要使用到WPF这种听说是非常陈旧的东西,但对于一个新人来说,只要是没接触的知识,在我看来,都是一个学习的过程。因为目前阶段已经脱离了使用最原始的微软控件构建界面的过程,不是我的要求,而是客户要求,说你这...

zyq_0719的博客 1367

WPF优秀开源代码合集:项目核心功能/场景

WPF优秀开源代码合集:项目核心功能/场景 【下载地址】WPF优秀开源代码合集 本仓库汇集了多个WPF(Windows Presentation Foundation)优秀开源项目,涵盖MVVM框架、日期时间选择器、数据可视化、Office风格UI、图形绘制及3D图形库等领域。这些资源旨在帮助开发者快速掌握WPF开发技巧...

gitblog_06752的博客 465

WPF-基础及进阶扩展合集(持续更新)

/格式化字符串类型。Console.WriteLine("格式str:{0}",str.Format);//获取格式化字符串的原始字符串。

rwo_bear的博客 5525

探索高效办公新境界:2022年WPF项目实战合集

探索高效办公新境界:2022年WPF项目实战合集 1. 项目介绍 在这个数字化时代,寻找一款能够助力日常任务管理、提高工作效率的应用变得至关重要。2022年WPF项目实战合集正是这样一款开源软件,它集成了先进的WPF(Windows Presentation Foundation)技术和ASP.NET Core WebApi服务,为你带来流畅的用户体验和强大的功能。通过观看B站上的视频教程,你可以...

gitblog_00040的博客 492

WPF PropertyGrid资料合集介绍

WPF PropertyGrid资料合集介绍 去发现同类优质开源项目:https://gitcode.com/ 在此项目中,我们收集整理了一系列关于WPF中PropertyGrid的资料。PropertyGrid是WPF(Windows Presentation Foundation)中一个功能强大的工具,它允许用户在一个统一的界面中查看和编辑对象的属性。 由于最近一个项目需求,我们需要利用WPF...

gitblog_06795的博客 476
上一篇: WPF程序给按钮增加不同状态的图片
下一篇: WPF下实现拖动任意地方都可以拖动窗口
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值