WPF
物随心转
子曰:“学而时习之,不亦说乎?”
展开
-
WPF界面卡顿的优化
一、问题有如下程序,执行起来UI要等待一会才显示<Window x:Class="测试DoEvent.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/ex转载 2020-08-22 19:11:19 · 7636 阅读 · 0 评论 -
wpf自定义控件之双滑块Slider
效果<UserControl x:Class="WpfApp1.SilderArrange" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="UC_Arrange" Loaded="UC_Arrange_Load转载 2020-08-22 19:12:24 · 1821 阅读 · 0 评论 -
WPF加载大量控件的优化
WPF 应用程序从两个线程开始:一个用于处理呈现,一个用于管理 UI。呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。UI 线程对一个名为 Dispatcher 的对象内的工作项进行排队。Dispatcher 基于优先级选择工作项,并运行每一个工作项,直到完成。每个 UI 线程都必须至少有一个 Dispatcher,并且每个 Dispatcher 都只能在一个线程中执行工作项。 而我们使用的基本上都是管理UI的线程,Dispatcher。问题...原创 2020-07-10 17:44:25 · 3057 阅读 · 0 评论 -
WPF加载大量的图片显示
一、问题如何在WPF中加载大批量数据,并且不会阻塞UI线程,尤其是加载大量图片时?二、方案大致情况是:数据源集合是一个ObservableCollection<PictureInfo>, 也就是说集合中放的是图像的一个自定义类,包含了Info,PicturePath等属性。界面通过Bind,使用转换器,将路径转换为ImageSource对象即可。PictureInfo:图像信息类 /// <summary> /// 图片信息类 /// <.原创 2020-07-10 17:07:11 · 2806 阅读 · 0 评论 -
WPF的单线程单元(STA)
一、问题:在多线程中不能直接访问UI,调用线程必须为 STA,因为许多 UI 组件都需要二、原因:线程模式分为STA(Single Threaded Apartment) 单线程单元 和 MTA 多线程单元(Multi-Threaded Apartment)1.介绍STA线程单元的运行方式称为每客户对象(Object-per-Client)模式,其含义是创建STA线程单元拥有它自己的线程。在任何一单元之内都只能有一个线程。在STA线程模式中,对线程的所有调用都放到一个队列中,然后逐个原创 2020-07-10 11:08:21 · 3001 阅读 · 0 评论 -
从进程中操作WPF窗体的显示隐藏
一、问题描述如何在一个进程中,打开另一个进程中的wpf已经隐藏的窗体二、解决方案1、在WPF进程中,获取该窗体的句柄,并保存到某个文件,这个文件可以是内存映射文件,也可以是普通的xml文件。在当前的MainWindow中 private void Window_Loaded(object sender, RoutedEventArgs e) { ...原创 2020-05-04 14:55:15 · 2259 阅读 · 0 评论 -
CheckBox的绑定问题
一、现象使用Convert转换器,将string转换为bool,CheckBox无法点击选中代码 <CheckBox Name="checkBoxMode" IsChecked="{Binding CurrentVal,Converter={StaticResource StringToBool},Mode=TwoWay }” HorizontalAlignment="Left"原创 2020-07-01 15:36:02 · 431 阅读 · 0 评论 -
Popup控件
一、介绍常用的属性IsOpen: 布尔值,指示 Popup 控件是否显示。比如说:IsOpen="{Binding ElementName=PCheckBox,Path=IsChecked}" 是通过绑定CheckBox的IsChecked属性来控制Popup的弹出。StaysOpen: 布尔值,指示在 Popup 控件失去焦点的时候,是否关闭 Popup 控件的显示。PopupAnimation:指示显示窗口时是否使用动画,只有在 AllowsTransparency 等于true时此属原创 2020-06-09 09:39:39 · 702 阅读 · 1 评论 -
ListBox的Datatemplate中添加触发器
选中ListBoxItem,更改样式 <ListBox.ItemTemplate> <DataTemplate> <Border Style="{StaticResource MenuItem}" Width="285" Name="PART_Border"> <TextBlock Grid.Row="0" Grid.Column="1"原创 2020-06-04 17:00:33 · 732 阅读 · 0 评论 -
UIElement.Clip 属性
获取或设置用于定义元素内容轮廓的几何图形。Gets or sets the geometry used to define the outline of the contents of an element. 这是依赖项属性。This is a dependency property.public: property System::Windows::Media::Geometry ^ Clip { System::Windows::Media::Geometry ^ get(); void set原创 2020-06-03 14:54:32 · 153 阅读 · 0 评论 -
DataGrid的样式——添加按钮控件
模板的使用而已,不仔细介绍了,直接上代码。 <DataGrid Name="datagrid" AutoGenerateColumns="False" Style="{StaticResource dataGridStyle}" CanUserAddRows="False" ItemsSource="{Binding UserInfoList}" Ro原创 2020-06-02 14:16:28 · 497 阅读 · 1 评论 -
Marshal.PtrToStructure的使用——WPF接收消息
一、问题前面已经讲过WPF与MFC联合编程,现在遇到一个问题,MFC发送了一个消息,C#如何解析该消息?比如MFCvoid CPlatform::SendMessageToMainWindow(EMsgType2UI nMsg, WPARAM wpara/* = NULL*/, LPARAM lpara/* = NULL*/){ CString temp(m_winTitle.c...原创 2020-04-18 17:13:11 · 1257 阅读 · 0 评论 -
如何判断WPF的颜色是否相等
var solidColorBrush = textBlock.Background as SolidColorBrush; if (solidColorBrush != null && solidColorBrush.Color == Colors.Red)//红色才检测 { BaseMapCha...原创 2020-04-17 17:26:42 · 725 阅读 · 0 评论 -
DataGrid后台实现选中某一行,并滚动到当前选中项
定义一个DataGrid <DataGrid Name="resultDataGrid" VirtualizingStackPanel.IsVirtualizing="False" AlternationCount="2" ...原创 2020-04-10 10:58:42 · 3057 阅读 · 0 评论 -
wpf 保存图片到任意格式jpg,png,bmp
private void ExportBtn_Click(object sender, RoutedEventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "jpg文件|*.jpg|png文件|*.png...原创 2020-03-21 17:59:27 · 959 阅读 · 0 评论 -
WPF使用DrawVisual来实现画图
在WPF中绘制形状时,如果数据量大(例如一条Polyline有10万多个数据点),绘制过程会很慢。目前能想到的解决办法有:1. 将形状绘制在位图里。2. 升级到最新.net4.5,WPF性能提升不少(这个要赞)3. 使用DrawVisual来实现画图。下面主要谈一下DrawVisual的用法。DrawingVisual 继承自Visual,是一个用于呈现形状、图像或文本的轻量绘图类。 ...原创 2020-03-18 20:27:22 · 3458 阅读 · 1 评论 -
wpf 读取网络图片
wpf读取网络图片:private void ViewImage(string fileUri){BitmapImage bitImage = new BitmapImage();bitImage.BeginInit();bitImage.UriSource = new Uri(fileUri, UriKind.Absolute);bitImage.DecodePixelWidth...转载 2020-01-10 16:16:48 · 817 阅读 · 0 评论 -
查找DataGrid的某一个单元格
有一个需求,要将Datagrid特定的某一个单元格(比如自定义的TextBox)设置为不可编辑。那只能先找到该单元格,然后设置该单元格的属性为IsReadOnly.XML,DataGrid数据绑定 <DataGrid Name="DataGrid1" ItemsSource="{Binding }" Margin="5 10 5 0"...原创 2020-01-08 09:56:03 · 298 阅读 · 0 评论 -
WPF Windows 设置无边框还能拖动,缩放
1、窗体的介绍标准窗口由两个重叠矩形组成。外部矩形是非工作区, 通常称为chrome。 它由操作系统的窗口管理器进行绘制和管理。窗口的非工作区是通过 WPF 实现的,其中包括大多数窗口所共有的窗口部分,包括以下各项: 边框。 标题栏。 图标。 “最小化”、“最大化”和“还原”按钮。 “关闭”按钮。 “系统”菜单,其中包含允许用户最...原创 2020-01-07 09:19:13 · 1327 阅读 · 0 评论 -
设置WPF的DataGrid多行显示不同的颜色
两种方式1、直接设置样式 <!--DataGridRow--> <Style TargetType="DataGridRow" x:Key="testRow"> <Style.Triggers> <!--隔行换色--> <Trig...原创 2020-01-04 20:02:45 · 2397 阅读 · 0 评论 -
WPF拖动事件
1、定义一个Dragthumb模板<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ...原创 2020-01-02 17:38:54 · 995 阅读 · 0 评论 -
wpf给模板控件添加事件二
第二种写法,在窗体的资源中使用EventSetter,注意,这里得使用隧道事件 <Window.Resources> <Style x:Key="TestTextBox" TargetType="{x:Type TextBox}"> <EventSetter Event="PreviewMouseDown" Hand...原创 2019-12-30 16:50:55 · 1218 阅读 · 0 评论 -
wpf给模板控件添加事件一
假如我们自定义了一个控件模板,里面有一个Slider控件,如何给它添加事件呢? <Style TargetType="{x:Type s:ZoomBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplat...原创 2019-12-30 16:33:43 · 2556 阅读 · 0 评论 -
自定义TextBox,实现自增自减
我们使用附加属性来实现,依赖属性也可以实现,原理一样如图xmal<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/200...原创 2019-12-09 17:12:45 · 378 阅读 · 0 评论 -
wpf TexBox的ValidationRules
样式 <Style TargetType="TextBox"> <Setter Property="Width" Value="100"></Setter> <Setter Property="HorizontalAlignment" Value="Left"></Setter...原创 2019-12-06 11:14:02 · 250 阅读 · 0 评论 -
ListBoxItem添加点击事件,实现拖拽
Style itemContainerStyle = new Style(typeof(ListBoxItem)); itemContainerStyle.Setters.Add(new Setter(ListBoxItem.AllowDropProperty, true)); itemContainerStyle.Setters.Add(new...原创 2019-12-04 14:26:21 · 1178 阅读 · 0 评论 -
wpf datagrid中定义binding
<DataGridTemplateColumn Header="{DynamicResource Operate}" Width="*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> ...原创 2019-11-30 16:23:48 · 644 阅读 · 0 评论 -
LIstBox拖拽排序
我们使用模板,这样ListBoxItem的Content中都是我们自定义的数据<ListBox BorderThickness="1" Style="{StaticResource CustomListBoxStyle}" ...原创 2019-11-29 15:37:09 · 613 阅读 · 0 评论 -
点击LixtBox的子元素,滚动条自动滚动
上一篇ListBox样式中,我们在模板中已经定义了ScroViewer,所以思路就是对它进行操作。利用ScrollToVerticalOffset(scrollViewer.HorizonOffert+100)进行移动水平的滚动条。也可以移动垂直的滚动条。 private int LastIndex = 0;//上一次的列表选中的索引 public ...原创 2019-11-22 15:00:10 · 213 阅读 · 0 评论 -
设置ListBox的子元素水平放置
两种方案第一种,可以设置ItemsControl.ItemsPanel属性<Grid.Resources> <Style TargetType="ListBox"> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplat...原创 2019-11-22 09:26:41 · 327 阅读 · 0 评论 -
CoerceValueCallback事件的使用
定义依赖属性public static readonly DependencyProperty ValueProperty = DependencyProperty.Register( "Value", typeof(decimal), typeof(NumericUpDown), new FrameworkPropertyMetadata(MinVa...原创 2019-11-18 13:41:09 · 1216 阅读 · 0 评论 -
WPF依赖属性优先级
有下面代码,属性,样式,触发器都设置了按钮的颜色,请问按钮最终是什么颜色?<Button Background="Red"> <Button.Style> <Style TargetType="{x:Type Button}"> <Setter Property="Background" Value="...原创 2019-11-04 15:25:42 · 510 阅读 · 0 评论 -
依赖属性
依赖属性就是一种可以自己没有值,并能通过binding 数据源获得值(依赖在别人身上)的属性什么时候需要定义依赖属性?1、希望支持动态资源引用2、希望支持动画3、希望支持数据绑定4、希望支持属性值继承5、希望该属性发生改变时触发一系列的行为6、希望该属性有自己的元数据7、希望在样式中使用该属性8、希望得到WPF样式器的支持,比如在wpf窗口中直接修改该属性...原创 2019-11-04 14:58:55 · 153 阅读 · 0 评论 -
BoolToVisibility的转换器
代码 [ValueConversion(typeof(bool), typeof(Visibility))] public class BoolToVisibilityConverter : IValueConverter { static BoolToVisibilityConverter() { Instance ...原创 2019-11-02 15:35:31 · 819 阅读 · 0 评论 -
WPF 实现多语言
1、编写Chinese.xml,English.xml文件2.、在项目的App.xml文件中<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <Resour...原创 2020-06-18 16:40:59 · 500 阅读 · 0 评论 -
System.Drawing.Image转化为WPF的ImageSource
主要思路:先将Image转化为Bitmap,然后将Bitmap转化为BitmapSource或者是BitmapImage对象1、写个静态方法,两种方法都可以public class ImageWork{ [DllImport("gdi32")] static extern int DeleteObject(IntPtr o); /// &...原创 2019-10-30 14:25:45 · 3407 阅读 · 0 评论 -
VisualBrush画刷
VisualBrush派生于TileBrush,TileBrush可以用来重复填充目标区域, 若要使用图像进行绘制,请使用 ImageBrush。 若要通过绘图绘制,请使用 DrawingBrush。 若要通过 Visual 进行绘制,请使用 VisualBrush。 一幅图案填充到目标区域,分别有以下两步骤:1、从画刷的内容投射到一个小面片(Tile)...原创 2019-10-29 11:19:19 · 601 阅读 · 0 评论 -
ListBox的样式
<ListBox BorderThickness="1" Style="{StaticResource CustomListBoxStyle}" ItemContainerStyle="{StaticResou...原创 2019-10-28 14:21:01 · 866 阅读 · 0 评论 -
wpf拖拽图片,滚轮放大缩小
WPF提供了很多函数方便我们处理图片,例如各式各样的Transform类用来移动、缩放和旋转图片,有各式各样的Effect类来修改图片的外观。更难得的是,这些类都可以在XAML代码直接设置,而XAML为了提高代码的可维护性,又为我们提供了Resource这么好的概念来将通用的代码和设置保存在一个中心位置,其它控件可以直接引用同一个Resource就可以获取同样的设置。因此,为什么我们不能将这两个工...转载 2019-10-25 15:11:53 · 3093 阅读 · 0 评论 -
wpf datagrid 表头居中
<DataGrid.ColumnHeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="Horizonta...原创 2019-10-19 10:58:54 · 731 阅读 · 0 评论