wpf开发
jiuzaizuotian2014
这个作者很懒,什么都没留下…
展开
-
WPF之PasswordBox控件的Password属性绑定
Password控件无法直接将Password属性绑定到ViewModel中Password属性,其原因在于Password属性并不是依赖项属性。为了进行绑定,可以写一个静态类来实现附加属性的绑定。依据 WPF Tutorial 上的例子如下:public static class PasswordHelper{ public static readonly DependencyProperty PasswordProperty = DependencyProperty.Re原创 2021-05-15 14:21:44 · 1038 阅读 · 0 评论 -
MahApps中的MetroAnimateSingleRowTabControl的使用
直接上代码: <mah:MetroAnimatedSingleRowTabControl x:Name="MetroTabControlClosable" FlowDirection="LeftToRight" DataContext="{Binding MyData}" ItemsSource="{Binding Ta原创 2021-05-05 10:36:26 · 463 阅读 · 0 评论 -
MahApps用户UI库中DataGrid中单元格字体颜色根据数字动态变化的样式设置
为了改变DataGrid中单元格字体颜色,可以设置CellStyle属性。首先定义Style,使其从MahApps.Styles.DataGridCell继承,然后将定义好的style赋值为DataGridTextColumn的CellStye属性,可以从xaml中赋值,也可以在back code中赋值。以下两个例子:(1)绑定到枚举值的例子,枚举直接写出其整数值,不要直接写枚举的字符 <Style x:Key="TextBlockForMyEnumCellSt原创 2021-05-05 10:19:42 · 329 阅读 · 0 评论 -
MahApps用户类库中DataGrid中ClearTextButton的取消
MahApps用户类库中DataGrid默认样式是其TextBox在编辑时,包含ClearTextButton。当表格中列数很多的时候,往往不需要ClearTextButton,否则双击进入编辑状态时常常不小心就把填好的内容删除掉了。通过定义如下的代码(当然具体样式参数根据需要设置),然后再设置DataGridTextColumn中设置EditingElementStyle就可以了。<Style x:Key="TextBoxEditingWithoutClearBtn" BasedOn="{St原创 2021-05-05 10:09:12 · 168 阅读 · 0 评论 -
MahApps用户UI库的基本使用
MahApps用户UI库是Metro风格的库,提供了很多控件/样式。首先通过Nuget安装该类库。然后在App.xaml中添加命名空间和ResourceDictionay即可使用。具体使用方式参见官方文档。当然,官方文档写得不详细,使用时常常要根据github上的Demo来参考如何写。xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" <Application.Resources> <...原创 2021-05-05 09:59:53 · 1395 阅读 · 0 评论 -
WPF数据绑定时FallbackValue和TargetNullValue的使用
(1)FallbackValueFallbackValue针对无法绑定(给定的Path不存在)时使用的默认值,默认情况下为UnsetValue.若绑定源的路径解析成功,且值转换器能够正确转为结果值,且该值对绑定目标属性有效,则会正常绑定数据,不会使用FallbackValue的值。如果不能正常绑定,则会使用FallbackValue值。常见的使用状况为:当绑定对象不存在时,什么都不要显示,存在时,根据给定的bool值判断是否显示。比如以下代码: ...原创 2021-05-05 09:07:22 · 1841 阅读 · 0 评论 -
DotNetProjects.WpfToolkit.Input库中的AutoCompleteBox控件
AutoCompleteBox是根据输入及时给出匹配选项供输入人员选择的控件。DotNetProjects.WpfToolkit.Input库提供了该控件。通过NuGet安装如下所示:使用AutoCompleteBox时,首先需要引入命名控件:xmlns:input="clr-namespace:System.Windows.Controls;assembly=DotNetProjects.Input.Toolkit"然后可以使用该控件。参考例子如下: <inpu.原创 2021-05-05 08:34:46 · 495 阅读 · 0 评论 -
WPF中资源图片的引用
在WPF中,为了引用资源图片,比如loading.gif,则可以使用Uri来定位。比如:<Image Source="pack://application:,,,/Resources/loading.gif"/>也可以简写:<Image Source="/Resources/loading.gif"/>(注意:上述xaml实际上也是无效的,Image控件不能显示动态的gif图片,此处仅仅用于说明资源路径的用法,如果把gif换成png或jpg图片,就没有问题了。原创 2021-03-18 09:17:37 · 2239 阅读 · 0 评论 -
在WPF中使用gif图片的XamlAnimatedGif包
为了在wpf中显示gif,可以使用XamlAnimatedGif包。打开Nuget,搜索XamlAnimatedGif,如果使用.NET5,则安装KsWare.XamlAnimatedGif.Wpf.StrongName,如下图所示。典型用法为:首先添加命名空间映射xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif"使用Image控件,为其设置附加属性<Image gif:Animation..原创 2021-03-17 15:32:25 · 2341 阅读 · 0 评论 -
.net core版WPF项目名称为xxxxxxClient时,无法输入中文
.net core 版本的WPF项目,当项目名称取为CRManaClient时,TextBox输入中文时,若输入法为搜狗拼音输入法,则无法输入中文。.net Framework版本的WPF项目,目前没有发现这种问题。原创 2021-02-17 11:50:00 · 269 阅读 · 0 评论 -
wpf之BitmapImage
WPF中的BitmapImage类是UI控件类,是.net对象,使用完毕不需要Dispose或close来对其释放资源;需要在UI线程上对其进行操作,不能再其他线程上对其进行操作,否则会报错。可以将其用于Image控件的Source属性,通常该Source属性可以简单的用路径来设置,比如<Image Source="c://123.jpg"/>,但是,当对123.jpg频繁进行修改时,会存在文件被进程占用的异常。这是可以采用BitmapImage对象。比如:<Imag...原创 2020-08-17 10:21:07 · 4032 阅读 · 1 评论 -
Button下拉式菜单
对于Button下拉式菜单,代码如下: <Button x:Name="PopupMenu" Content="┇" Click="PopupMenu_Click"> <Button.ContextMenu> <ContextMenu Name="contextMenu">...原创 2020-05-18 10:30:33 · 1795 阅读 · 0 评论 -
WPF部分控件的键盘事件无法触发
对于默认情况下无法触发键盘事件的控件,比如ItemsControl,StackPanel,Canvas,Grid等,为了能够触发事件,需要利用控件的Focus()方法来使其获得焦点。步骤1:将控件的Focusable属性设置为true,即在xaml中,使用Focusable=true来设置步骤2:在鼠标或其他事件中,对控件施加方法Focus,如myCanvas.Focus()...原创 2020-05-17 17:34:23 · 1634 阅读 · 0 评论 -
代码生成的形状控件的事件无法冒泡到父/祖父控件中
有时,利用程序生成的WPF的UI控件对象,其事件无法冒泡到其背后的父/祖父控件上。比如以下代码,在代码中生成了一系列的Reatangle对象,但是rect对象的事件无法冒泡到myGridControl的上级控件上。public void UpdateRects(IEnumerable<Point> points) { foreach(var p in points) { Syste...原创 2020-05-17 16:44:00 · 224 阅读 · 1 评论 -
Polyline的锐角交叉点突出较长的解决方法
WPF中的Polyline在线段之间为锐角,尤其是锐角很小的时候,会突出交叉点较长的距离(形成楔形三角形形状)。为了不显示突出的部分,可以通过设置StrokeLineJoin属性来解决,如下所示。 polyline.StrokeLineJoin = PenLineJoin.Round;...原创 2020-05-16 19:00:09 · 461 阅读 · 0 评论 -
WPF之TextBox获得焦点
当 textBox.Focus();或 Keyboard.Focus(textBox)无效的时候,试试下面方法: this.Dispatcher.BeginInvoke(DispatcherPriority.Background,(Action)(() => { Keyboard.Focus(textBox); }));实测有效...原创 2020-05-16 09:36:50 · 4395 阅读 · 2 评论 -
stylus、touch 、 Mouse event ,WPF
(1)Mouse相关的事件对象(MouseButtonEventArgs)中的数据:e.StylusDecice==null(2)Stylus触笔事件(StylusXXXEventArgs)中的数据:e.StylusDevice!=null&&e.StylusDevice.Id=2(3)Touch手指触摸事件(TouchEventArgs)中的数据:...原创 2020-04-24 22:11:24 · 1436 阅读 · 0 评论 -
WPF—TextBox 后台绑定double,如何让前台不显示默认0
WPF—TextBox 后台绑定double,如何让前台不显示默认0原创 2020-05-16 19:10:10 · 763 阅读 · 0 评论 -
自定义InvokeMouseCommandAction类,用于WPF中的鼠标事件到prism:DelegateCommand的绑定
可以实现鼠标事件绑定到DelegateCommand的功能,对prism中的InvokeCommandAction进行改写,得到InvokeMouseCommandAction类。该类使用很简单,就是<local:InvokeMouseCommandAction Command="{Binding MouseDownCommand}"/>,在xaml中的详细语句如下: ...原创 2020-03-14 11:23:03 · 1428 阅读 · 0 评论 -
Prism之InvokeCommandAction的TriggerParameterPath和CommandParameter的用法
TriggerParameterPath是对应于EventArgs中的属性路径,比如用于SelectionChanged事件,则对应于SelectionChangedEventArgs的属性的字符串,如果写 TriggerParameterPath="AddedItems",则指SelectionChangedEventArgs.AddedItems对象。CommandParameter和Trig...原创 2020-03-13 18:00:35 · 3561 阅读 · 5 评论 -
WPF程序的图标更改
VS中默认的WPF项目图标是一个窗口,在开发过程中通常需要更改为具有和相许特性相关的专用图标。更换的方法为:(1)制作图标文件,通常以.ico为后缀的文件。可以利用在线ICO网站生成图标文件。(2)在VS中,右键单击解决方案下面的WPF工程项目,在上下文菜单中选择属性。(3)在弹出的属性设置界面,找到“应用程序”中的图标选择框,点击“浏览”按钮选择需要设置的图标文件即可。...原创 2020-01-01 16:10:10 · 7850 阅读 · 0 评论 -
Mouse.OverrideCursor属性的使用
Mouse.OverrideCursor用于设置鼠标的形状,可以通过Mouse.OverrideCursor=Cursors.xxx来设置鼠标形状(xxx表示Cursors类的某个成员),如果取消设置,可以使用Mouse.OverrideCursor=null。该设置是应用于整个程序的。https://docs.microsoft.com/en-us/dotnet/api/system.w...原创 2019-12-22 16:07:42 · 733 阅读 · 0 评论 -
WPF在绑定ObservableCollection<FrameworkElement>类型时发生“指定的参数已超过有效值的范围”或“某个ItemsControl与它的项源不一致"异常
WPF在绑定ObservableCollection<FrameworkElement>类型时,当集合ObservableCollection<FrameworkElement>本身发生改变时,如果再次返回到曾经绑定过的ObservableCollection<FrameworkElement>集合后,当向集合中再次添加元素时,会出现“指定的参数已超过有效值的范...原创 2019-12-01 21:27:08 · 751 阅读 · 1 评论 -
WPF GridSplitter中需要设置HorizontalAlignment和VerticalAlignment
对于竖向的情况:<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" VerticalAlignment="Stretch"></GridSplitter>对于水平方向的情况:<GridSplitter Grid.Row="1" Height...原创 2019-11-24 08:58:47 · 1448 阅读 · 0 评论 -
Wpf 的ViewModel中 ObservableCollection不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
转发原文:Wpf ViewModel中 ObservableCollection不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改主要内容摘录如下:Wpf中ViewModel类的ObservableCollection不支持从调度程序线程以外的线程对其更改,解决方法如下:ThreadPool.QueueUserWorkItem(delegate...原创 2019-05-09 11:03:16 · 2140 阅读 · 0 评论 -
WPF高性能绘图之DrawingCanvas、DrawingVisual、Button的同时使用
当有大量图形需要绘制的时候,WPF推荐的是采用DrawingVisual结合DrawingCanvas进行绘制。WPF中给出的DrawingCanvas代码如下,它从Canvas继承,并改写了VisualChildrenCount只读属性、GetVisualChild方法、AddVisual、DeleteVisual和ClearVisuals方法。然而,该代码不能显示Button之类的元素。...原创 2019-04-28 21:41:04 · 9829 阅读 · 1 评论 -
IOC容器StructureMap在WPF程序中的基本使用方法
StructureMap类库主要应用于IOC方面,为了在WPF程序中充分利用依赖注入的优势,可以使用依赖注入容器StructureMap来简化开发工作,本文介绍简单用法。原创 2018-01-01 19:11:09 · 768 阅读 · 0 评论 -
WPF中的Slider控件当施加IsManipulationEnabled=true时无法使用触摸屏来移动滑块
WPF中的Slider控件当施加IsManipulationEnabled=true时无法使用触摸屏来移动滑块,把IsManipulationEnabled改为false(IsManipulationEnabled=false),则它可以响应触摸屏的动作。...原创 2019-05-19 17:02:29 · 1088 阅读 · 0 评论 -
WPF中Canvas如何屏蔽长按事件导致弹出的空的方框
WPF中Canvas,有时并没有设置ContextMenu,但是长按的时候会弹出一各方框来。如何屏蔽掉这个空的方框的弹出?可以通过设置如下的附加属性实现,虽然是 Stylus开头的附加属性,但是对屏蔽长按(长时间Touch )弹出的c方框是有效的。Stylus.IsPressAndHoldEnabled="False"...原创 2019-06-02 18:41:20 · 494 阅读 · 0 评论 -
WPF在Surface上使用的时候,触摸操作TextBox时会自动弹出系统软键盘,那如何禁止软件盘的弹出呢?
如题,继承TextBox生成新的TextBox子类,并重写它的OnCreateAutomationPeer()方法如下: protected override AutomationPeer OnCreateAutomationPeer() { return new FrameworkElementAutomationPeer(this...原创 2019-08-15 07:43:38 · 1506 阅读 · 0 评论 -
WPF 的Canvas画图区整体缩放与平移(一)
WPF对象都具有RenderTransform的属性,可以通过设置RenderTransform来对WPF的元素进行变换,无论是控件还是形状都可以变换。典型的变换包括缩放和平移:(一)缩放如果采用Canvas作为画板来绘制一些形状,想要通过鼠标或触摸操作来进行放大或缩小,那么不能简单地对canvas进行变换,否则Cancas放大的时候就会覆盖周边的其它控件,也就是Canvas占据的屏幕变大...原创 2018-09-12 12:18:49 · 14528 阅读 · 3 评论 -
WPF组件中当设置IsManipulationEnabled="True"时导致TouchUp、触摸Click不能被触发的解决方法
WPF元素当设置IsManipulationEnabled=true的时候,TouchMove和TouchUp事件都会优先去触发产生Manipulation事件,而不会被元素中的TouchMove、TouchUp关联的事件处理程序所捕获。Touch事件与Manipulation 关系如下:如上面这段话所说,当第一个Touch Device 产生TouchDown事件且e.Ha...原创 2019-04-28 20:55:16 · 3990 阅读 · 0 评论 -
WPF 中保存 window(窗口)或者canvas成图片
WPF 中保存 window(窗口)或者canvas成图片转载 2019-03-13 15:47:31 · 1909 阅读 · 0 评论 -
Bitmap的LockBits方法
Bitmap的LockBits方法,public System.Drawing.Imaging.BitmapData LockBits( System.Drawing.Rectangle rect, System.Drawing.Imaging.ImageLockMode flags, System.Drawing.Imaging.PixelFormat fo...原创 2018-07-30 23:57:34 · 3169 阅读 · 0 评论 -
WPF中使用Image控件元素显示图片文件和内存Bitmap位图的方式
WPF中显示图片的控件为Image控件。以下分别介绍显示图片文件和内存位图的使用方法,主要介绍如何赋予Image对象的Source属性值。(一)使用图片文件方式一:<Image Width="320" Source="D:\\xxx.jpg"/>方式二:<Image Width="320"> <Image.Source> ..原创 2018-07-30 12:12:46 · 43863 阅读 · 2 评论 -
WPF渲染事件CompositionTarget.Rendering
CompositionTarget.Rendering EventWPF渲染之前出发该事件,参见https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.media.compositiontarget.rendering?view=netframework-4.7.2原创 2018-07-29 18:41:19 · 3741 阅读 · 0 评论 -
WPF之ListView使用WrapPanel
为了在ListView中显示Wrap样式的子项,需要设置ItemsPanel为WrapPanel,如下所示。此外,还要将ScrollViewer.HorizontalScrollBarVisibility设置为"Disabled",否则是不能Wrap的。实现的代码如下所示: <ListView ItemsSource="{Binding Source...原创 2018-07-07 12:26:21 · 3043 阅读 · 0 评论 -
WPF中带有圆形色彩背景的自定义文本控件CircleTextBlock
(一)说明为了显示类似于以下这样的带有圆形色彩的文本,可以又很多办法,最简单的就是直接画个圈再写个文字。由于经常用到,每次都自己来做比较麻烦,所以自定义了一个控件叫做CircleTextBlock,该控件继承自UserControl,对外暴露了Size、Text、Fill三个关键的依赖项属性,它们的数据类型分别为double,string,SolidColorBrush。此外,文字的颜色依然由...原创 2018-07-23 16:54:17 · 2205 阅读 · 0 评论 -
WPF中TreeView使用时的注意事项
TreeView控件是wpf中非常强大的树形控件。典型的用法如下:<TreeView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Models}" > <TreeView.Resources> <HierarchicalDataTemplat...原创 2018-05-22 16:19:39 · 1299 阅读 · 0 评论 -
WPF中的数据模板使用方式之一:ContentControl、ContentTemplate和TemplateSelector的使用
在WPF中,数据模板是非常强大的工具,他是一块定义如何显示绑定的对象的XAML标记。有两种类型的控件支持数据模板:(1)内容控件通过ContentTemplate属性支持数据模板;(2)列表控件通过ItemTemplate属性支持数据模板。本文主要谈论以下内容控件中的模板选择。原创 2017-11-27 23:01:22 · 10959 阅读 · 0 评论