自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 资源 (7)
  • 收藏
  • 关注

翻译 #467 – 使用UniformGrid 均分行和列(Use a UniformGrid for Evenly Spaced Rows and Columns)

UniformGrid 布局面板和Grid 面板相似,将子元素按照行列的方式排列。但是可以Grid 有一下不同: - 不需要指定行和列的大小 - 所有列都是相同的宽度 - 所有行都是相同的高度 - 要指定预期的行和列的数目 - 不需要给子元素指定所在的行和列子元素将自动的根据添加是顺序从第一行开始显示在对应的行和列中,每样都是从左至右。

2016-11-29 14:53:34 5600

翻译 #466 – 将GridSplitter和SharedSizeGroup联合使用(Using a GridSplitter in Conjunction with a SharedSizeGroup)

一个GridSplitter 允许用户通过拖动分隔条改变行或者列的大小,SharedSizeGroup 属性运行多个行或者列自动拥有同样的大小。你可以将他们合并在一起,允许用户拖动改变一个列或者行的大小,而另外的行或者列自动和它保持一样的大小。下面的例子中,用户可以拖动任何一个分隔条,同时改变左右两列的宽度。

2016-11-29 11:39:38 490

翻译 #462 – 画一个外观更漂亮的GridSplitter(Drawing a Better Looking GridSplitter)

GridSplitter 用来分隔Grid面板的行和列。默认情况下,GridSplitter 控件由一个单独的Border 元素组成。你可以设置border的边框,颜色和背景色来改变GridSplitter 的外观。我们可以在其表面画一对水平线使GridSplitter 的外观更漂亮。我们通过重写GridSplitter 默认样式来实现这个外观。

2016-11-29 10:27:50 1925

翻译 #455 – Using ItemContainerStyle to Bind Data Elements in a Collection to a Grid

在之前的文章中,需要将ItemsControl的子元素的行列和Grid.Row 和Grid.Column 属性绑定,我们的做法是将行列绑定到包含显示项的ContentPresenter 的Grid.Row 和Grid.Column ,是通过继承ItemsControl 类然后重写PrepareContainerForItemOverride 实现。但是有一个更简单的方法(有原文的读者Bru

2016-11-28 18:23:21 397

翻译 #448 – 在Grid中显示数据绑定元素的集合(Data Binding Elements in a Collection to a Grid)

假设你有一个集合,想将集合的数据显示在Grid上,数据所显示行和列根据集合的内容动态设置。你需要在集合的单个实例中有指定行和列的属性并对其进行绑定。你可以使用Grid 面板作为ItemsControl的ItemsPanel 。这样子元素将以Grid 的方式进行布局。然后你可以设置ItemTemplate 属性确定如何显示每个子项的内容。首先你可以试着用下面的代码:<Window x:C

2016-11-28 17:01:55 1271

翻译 #444 – DockPanel 中的子元素不一定一直都是平铺显示(Children of DockPanel Don’t Always Have to be Stretched)

一般情况下,你将子元素停靠在DockPanel 控件中的一边,子元素会平铺当前条目的宽度或者高度显示。但是,如果你使用子元素的HorizontalAlignment 属性(停靠在Top 或者Bottom)或者VerticalAlignment 属性(停靠在Left 或者Right),将会是子元素自动根据内容调整大小。 可以从下图看到,

2016-11-28 11:45:26 750

翻译 #436 – 给Border加上立体阴影(Using a Drop Shadow with a Border)

如果你为一个Border指定一个DropShadowEffect ,那么所有Border 里面的子元素都会获得立体阴影。 效果如图如果你想阴影仅仅只是围绕在Border周围,而不是每个子元素都有阴影。你可以创建两个双生的Border ,一个用来显示子元素,但是没有阴影;一个在相同的地方,

2016-11-25 10:08:51 3814

翻译 #431 – 绑定控件的宽度到高度(Binding a Control’s Width to Its Height)

同一控件的不同属性可以相互绑定,因此你可以将空间的宽度绑定到高度以保证控件一直是一个正方形。下面的例子中,Button控件的HorizontalAlignment属性设置为Stretch,它的宽度会随着容器大小的改变而改变。如果将其ActualWidth属性绑定到Height属性上,那么高度将会一直和宽度相同。 <Button Horizonta

2016-11-24 18:05:01 2154

翻译 #425–使用SharedSizeGroup在Grid间共享列的大小(SharedSizeGroup Allows Sharing Column Sizes Across Differet Grid)

你使用ColumnDefinition的SharedSizeGroup属性使ListBox中所有的子项的列大小都一样。这是因为列表中的每一项中都有自己Grid实例,并且各个不同的Grid之间共享了列宽。一个很普通的例子,我们可以在一个窗口中的两个Grid控件之间共享列宽。

2016-11-24 18:01:04 1405

翻译 #409 – 加入Grid中的子元素默认占满所在单元格(Child Elements in a Grid Size to Fit the Containing Cell)

默认情况下,Grid的子元素会自动调整大小占满其所在单元格。你通常不需要为其设置大小,它的大小会根据所在单元格变化而与单元格保持一致。你也可以通过设置子元素的Margin 属性来设定其与单元格边距距离。

2016-11-10 14:37:31 3814

翻译 #402 – 最后一个添加到DockPanel 中的元素默认占据所有剩余空间(Final Child of DockPanel Fills Remaining Space by Default)

默认情况下,DockPanel 中的最后一个元素将自动扩展以占满所有可用的空间,无论DockPanel.Dock 设置为何值。下面用三个不同背景色的Label来演示: 这是因为DockPanel 的LastChildFill 属性的默认值为true。如果设置为false,就会是不一样的情况,最后一个元素将不会占据所有剩余空间。

2016-11-10 10:25:13 1790 1

原创 WPF将控件导出为图片

WPF将片,主要是使用RenderTargetBitmap 类。下面是一段示例代码:RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)this.exportGrid.ActualWidth, (int)this.exportGrid.ActualHeight, 96d, 96d, PixelFormats.Defau

2016-11-09 17:19:04 5364

翻译 #400 – 使用ItemsPanel 属性将WrapPanel 作为ListBox的显示面板(Using a WrapPanel as the Items Panel for a ListBox)

ListBox 的ItemsPanel 属性可以指定定义显示各子项的面板的模板。你可以通过定义自己的模板重写ListBox 常见的垂直堆叠式布局。如果你设置了ItemsPanel 模板为WrapPanel,ListBox 将会有WrapPanel的特性。在下面的例子中,我们将上一篇中的ListBox 稍作修改。指定ItemsPanel 包含一个WrapPanel。

2016-11-09 15:09:27 4215

翻译 #395 – 通过数据绑定丰富ListBox 的内容(Rich ListBox Content using Data Binding)

在上一篇讲述SnapsToDevicePixels 属性的文章中,我们使用了一个ListBox 的例子列出了很多电影。里面每一个条目都有包括缩略图在内的若干个数据项组成。下面我们看一下如何在WPF中建立这样一个项目。首先,我们需要一个Move类来存储每个电影的信息。我们将用数据绑定绑定一个这个类的实例,我们也想在数据发送改变的时候绑定能够更新,所以我们继承INotifyPropertyCh

2016-11-09 14:43:59 3514

翻译 #392 – 使用SnapsToDevicePixels 属性消除抗锯齿效果(Use SnapsToDevicePixels Property to Prevent Anti-Aliasing)

因为WPF使用的是设备无关像素,一些GUI控件会因为抗锯齿效果而出现显示模糊的现象。下面图片的例子中,同样宽度为1的竖线显示并不一样。你可以通过设置UIElement 的SnapsToDevicePixels 属性值为true 来消除因为抗锯齿效果而出现的模糊。当设置该属性为true 的时候,渲染系统将会对控件按照像素边界对齐,以消除防锯齿。下面是设置ListBox 的SnapsT

2016-11-08 15:39:57 726

翻译 #391 – 抗锯齿效果会导致界面元素显示模糊(Anti-Aliasing Can Lead to Fuzzy GUI Elements)

你在WPF中设置GUI控件位置和大小使用的是设备无关像素(关于设备无关像素可以看我之前写的文章矢量图与像素无关)。它可以使界面元素在不同的分辨率下始终保持一致的比例显示。因为你没有准确的指定具体的物理像素(根据分辨率不同而变化),控件的边缘很可能并不是正好在某个物理像素上。WPF就在渲染界面控件的时候使用了抗锯齿的方法,比如,某个元素的边界正好卡在半个物理像素的地方,那么这个像素将会按照原来一

2016-11-08 14:31:30 769

翻译 #382 – 将RichTextBox的内容保存为XAML文件(Persisting RichTextBox Contents as XAML)

你可以通过使用TextRange 对象的Save 方法对RichTextBox 控件的内容进行保存。在下面的例子中,我在RichTextBox 控件中输入一些带格式的内容,然后按下Save 按钮。如下图:下面是保存按钮的代码:private void Button_Click(object sender, RoutedEventArgs e) {

2016-11-07 10:00:23 690

翻译 #381 – RichTextBox加载.rtf文件(Loading .rtf Files Into a RichTextBox)

RichTextBox 控件不仅支持加载.txt文件,也可以加载富文本格式文件(.rtf)。你可以使用RichTextBox 的Selection 属性加载文件。XAMLC#rtfMain.Selection.Load(new FileStream(@"D:\Spade.rtf", FileMode.Open), DataFormats.Rtf);显示效果:

2016-11-04 15:23:52 1943

翻译 #380 – Frame控件可以显示网页内容(The Frame Control Can Host Web Content)

你可以通过设置Frame 控件的Source 属性值为可用的URL地址来显示网页内容。它也可以显示标准的网页控件。Grid> <Frame Grid.Column="0" Source="http://en.wikipedia.org/wiki/Snoopy" NavigationUIVisibility

2016-11-04 09:48:37 1863

翻译 #379 – 将ToolTip当做放大器使用(Using a Tooltip As a Magnifier)

你可以将ToolTip当做放大器使用,当鼠标悬停在控件上的时候,ToolTip将会显示这个控件的放大视图。在下面的代码中,我们定义TooTip中有一个长宽是控件两倍的Rectangle (使用绑定和converter)。然后我们用VisualBrush 填充Rectangle 并绑定VisualBrush 的Visual 属性到Tooltip的宿主控件。 <T

2016-11-02 10:11:08 394

翻译 #377 – 通过将ToolTip定义为资源对其进行重用(Reuse Tooltips by Defining Them as Resources)

因为提示工具是一个Tooltip 控件的实例,隐藏你可以通过资源字典创建提示控件并重用他们。下面是一个用绑定数据显示提示控件的例子:首先定义资源, 然后我们在TextBox 中使用它,<TextBox Text="Now is the winter of ou

2016-10-27 11:26:10 376

翻译 #375 – 将Tooltip 于父控件的某个属性绑定(Binding Something in a Tooltip to a Property on the Parent Control)

你可以直接将简单的将控件的某个属性和Tooltip 进行绑定。但是如果Tooltip 的内容是自定义的的,如何使用数据绑定呢?假设你的Tooltip 的内容中包含了若干个Label,而你想其中某个Label的内容显示的是父控件某个属性的值。你可以像下面的代码一样使用Tooltip 的PlacementTarget 附加属性来找到父级,然后设置Tooltip的DataContext 属性来进

2016-10-26 09:56:27 1327

翻译 #371 – 指定日历控件显示的日期时间(Specifying a Default Date for a Calendar Control to Display)

当你使用日历控件Calendar 的时候,它会默认显示当前的日期。但是你可以通过设置DisplayDate 属性,设置默认显示的日期。上面的代码默认显示1969年七月二十号。你也可以通过DisplayDateStart 属性和DisplayDateEnd 指定日历显示一段时间,在这段时间外的将不会在日历控件中显示。从图片中看到,设置了起始时间为1949年12月

2016-10-25 11:45:53 1792

翻译 #370 – 通过绑定显示当前时间(Binding a Label’s Content to the Current Date and Time)

你可以通过绑定Label控件的Content属性到DateTime.Now属性显示当前的日期和时间,但是如果仅仅是直接绑定,时间是不会自动更新的。需要显示时间持续更新,你需要绑定一个可以持续通过INotifyPropertyChanged 接口通知改变的属性。这个我们可以通过一个计时器来实现。XAML代码: 在C#代码中,我们定义一个属性表示显示的时间,并且开启计时器Timer:

2016-10-24 11:39:53 1397 1

翻译 #368 –在Calendar 控件中指定不可选择日期(Specifying Blackout Dates in a Calendar Control)

你可以通过设置日历控件的BlackoutDates 属性值来指定用户不可以选择的日期。BlackoutDates 属性是CalendarBlackoutDatesCollection类型(CalendarDateRange 类型的显示集合)。你可以通过定义若干CalendarDateRange 实例在XAML中设置不可选日期。

2016-10-14 16:47:16 2337

翻译 #364 – 日历控件日期多选(Allowing a User to Select Multiple Dates in a Calendar Control)

默认情况下,日历控件只能允许用户选择一个日期。你可以通过设置SelectionMode 属性来允许选择多个或者一个日期。SelectionMode 的值是CalendarSelectionMode 类型的枚举,它可以是下面几种值: - None - 用户不能选择日期 -SingleDate - 只能选择一个日期(默认值) -SingleRange  - 可以选择连续的多个日期

2016-10-14 16:29:49 2559

翻译 #363 – 日历控件基础(Calendar Control Basics)

WPF日历控件显示一副日历画面,允许用户选择日期和时间。默认情况下,日历控件显示的是一整个月的日期。 通过控件的SelectedDate 属性,可以得到用户选择的日期。你可以通过控件顶部的左右箭头按钮切换至前一个月和后一个月。Calendar 控件也可以显示一年的选项,或者十年选项。原文地址:https://wpf.2000things.c

2016-10-14 15:33:25 821

翻译 #358 – 将RadioButton和枚举绑定(Binding a RadioButton to an Enumerated Type)

你可以通过转换器将RadioButton 控件和一个枚举类型绑定。XAML代码: <RadioButton IsChecked="{Binding Path=FavCharacter, Converter={StaticResource enumToBooleanConverter}, ConverterParameter={x:Static loc:C

2016-10-14 09:59:01 1251

翻译 #347 – 通过Command设置按钮的内容(How to Set Content Property for Button Based on Command)

上一篇讲到,当设置MenuItem的Command 属性的时候,菜单可以根据自动根据命令显示文字,而不需要设置菜单的Header 属性。但是Button 控件却不能这样。如果你想根据命令的Text 设置按钮显示的文字,你需要在XAML或则后台代码中写如下代码。如果是在XAML中:<Button Content="{Binding RelativeSource={RelativeSour

2016-10-13 14:46:03 345

翻译 #346 – 使用命令的时候MenuItem可以不设置Header属性(No Need to Set Header Property for MenuItem When Using Commands)

在使用一个已经定义好的RoutedUICommand 实例的时候,你会发现RoutedUICommand 有一个Text 属性。这个属性用来在绑定了命令的菜单上显示文字。如果没有菜单没有设置Header属性,菜单则会将这个属性的值作为内容显示。 原文地址:https://wpf.2000things.com/2

2016-10-12 15:41:38 383

翻译 #344 – 通过CanExecute控制按钮是可用(The CommandBinding CanExecute Determines Whether a Button is Enabled)

当你将按钮的Command 属性和一个CommandBinding 实例绑定,同是也设置了Executed 和CanExecute 的处理函数,那么按钮控件将会根据CanExecute 方法的代码自动改变自己的可用性。假设我们创建了两个按钮,给他们分别绑定 open和close命令。 <Button Content="Open" Command="ApplicationComman

2016-10-12 10:13:10 1073

翻译 #342 – 将Button 和Command绑定(Binding a Button to a Command)

在WPF中,按钮点击操作执行后要执行的代码通常使用命令(command)的方式来实现。命令(command)表示一个即将执行的操作,并为这个操作指定了一个特定的方法。按钮可以通过设置其Command 属性为其绑定关联的命令。下面是一个例子:ApplicationCommands.Open 是一个预定义好的命令,你通过在父窗口中添加一个新的CommandBinding 实例到Comma

2016-10-11 18:16:47 3491

翻译 #339 – 是按钮上的文字换行显示(Wrapping a Button’s Text Content to Multiple Lines)

当Button 控件的大小是根据内容自适应的时候,它的大小将根据内容调整为完全显示说有文字,但是这样显示的文字只用一行显示。<Button Content="Click me if you want to see something cool. In fact, click as many times as you like." HorizontalAlignment="Ce

2016-10-11 17:01:28 3535

翻译 #331 – 各种控件HorizontalContentAlignment 和VerticalContentAlignment的默认值

各种控件HorizontalContentAlignment / VerticalContentAlignment  默认值Button – Center, CenterCalendar – Left, TopCheckBox – Left, TopComboBox – Left, TopContextMenu – Left, CenterDataGrid – Left,

2016-10-10 14:30:58 1770

翻译 #320 – StackPanel默认如何设置子控件的大小(Default Size of StackPanel Child Controls)

默认情况下,StackPanel 根据下面的逻辑来设置子控件的大小:如果是Orientation 是垂直的: -子控件的高度将根据其自身的需要确定 -子控件的宽度将横向占满整个StackPanel 如果Orientation 是水平的: -子控件的宽度将根据其自身的需要确定 -子控件的高度将横向占满整个StackPanel 下面的地址将StackPanel 的子控件垂直

2016-10-09 17:27:55 4213

翻译 #316 – 改变按钮的ClickMode(Changing the ClickMode of a Button)

在Windows系统中,一般的按钮都会在点击之后执行某个操作。通常“点击”被认为是鼠标左键被“按下”然后“释放”这一连续动作的组合,而和按钮相关联的操作会在“释放”动作结束后触发。在WPF中,你可以通过改变Button.ClickMode 属性改变 Click 事件触发的时间。ClickMode 的值为一下的枚举: -ClickMode.Release – 当释放鼠标按键的时候触发Clic

2016-10-09 16:52:04 2120

翻译 #309 – 键盘焦点和逻辑焦点(Keyboard Focus vs. Logical Focus)

在WPF中,有两种焦点:键盘焦点和逻辑焦点。如果一个控件获得了键盘焦点,那么该控件就是当前可以获得键盘输入的控件。每个程序只能有一个控件能获得键盘焦点。如果一个控件获得了逻辑焦点,那么说明该控件获得了当前焦点域(focus scope )内的逻辑焦点。WPF会记录一组或多组控件,每个组被看做是一个焦点域(focus scope )。在每个焦点域内只有一个控件可以获得逻辑焦点。逻辑焦点帮助W

2016-10-08 18:08:16 2254

翻译 #308 – 获得当前拥有键盘输入焦点的控件(Checking to See Which Control Has Keyboard Focus)

windows系统中,只有获得键盘焦点的控件才能接收键盘输入。WPF中,你可以通过调用System.Windows.Input 命名空间中的Keyboard.FocusedElement 这个静态属性来确定那个控件获得了当前的键盘输入焦点。下面是例子:private void DumpFocus(){ IInputElement elem = Keyboard.FocusedEl

2016-09-27 10:55:01 1144

原创 WPF改变图片的DPI

改变图片的DPI,比如将DPI是96的图片改变为DPI是147的图片,我们采用的方法是创建一个新的BitmapSource,将原来图片的内容拷贝过来。代码如下:targetBitmap.CopyPixels(pixelData, width * 4, 0); BitmapSource bmpSource = BitmapSource.Create(width, height

2016-09-27 10:16:43 1809

翻译 #304 – 为没有文本标题的控件定义Access 键(Defining an Access Key That Gives Focus to a Different Control)

有些控件,并没有自己的文本标题,他们可以通过与之相邻的Label来定义自己的Access 键。通过Access 键,他们可以获得输入焦点。下面的例子中,在“Enter Name”这个Label 旁边有一个TextBox 控件,你可以在里面输入你的名字。在前面的Label中 'N'前面有下划线,因此‘N’就是TextBox 的Access 键。如果你按下ALT+N,那么后面的TextBox 将会

2016-09-26 16:07:42 397

你比我猜,游戏程序(windows)

公司年会的时候需要做一个你比我猜的游戏,于是让我写了一个游戏UI,十分简单,现在分享出来给大家。这个程序需要.Net Framework4

2018-01-31

WPF播放GIF图片源代码

WPF播放GIF项目,里面有实现了一个控件(GIFImage)播放GIF控件,然后在窗体中使用。这个控件可以单独拿出来使用。

2016-09-23

WPF拖曳例子

WPF拖曳例子

2016-06-28

WPF Drag Drop例子

WPF Drag Drop例子

2016-06-28

官方WPF 拖曳例子源代码

官方WPF 拖曳例子

2016-06-28

微软C#无线网络管理库

微软官方C#编写的无线网络管理类库

2016-05-24

电脑报VC++教程

简单易懂的介绍了MFC编程,示例不错,适合新手。

2007-12-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除