// Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(UserControl1));
Xaml代码
探究为什么
{Binding} 这个到底绑定到了什么
1.先给窗体设置一下DataContext,很简单的设置了一个对象。
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
DataContext = new Student() { Name = "Body",Sex = "Male",Age = 18};
public class Student {
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
2.在Xaml添加一个Lable,给Content属性添加绑定
<StackPanel>
<Label x:Name="LableInstance" Content="{Binding}" ></Label>
</StackPanel>
运行后很简单看出 Content绑定结果是自身的DataContext(
为什么不是父级的,可以自己单独给Label设置一个和父级不一样DataContext,我就不演示了
)。而且它的DataContext继承了父级的DataContext。StackPanel的DataContext自然而然也是这个。
源码里面也定义了DataConetxt依赖属性,由子元素继承FrameworkPropertyMetadataOptions.Inherits
DataContextProperty = DependencyProperty.Register("DataContext", typeof(object), _typeofThis, new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, OnDataContextChanged));
我们不难发现用户控件的DataContext是继承于父级的。用户控件里面的元素也是继承用户控件的DataContext,所以是没办法用简单的Binding Path 来绑定到依赖属性的。
如果不喜欢写那么一大串的绑定,可以用模板来。用TemplateBinding 是直接绑定到控件的依赖属性上的。
<UserControl x:Class="WpfApp3.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp3"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="local:UserControl1">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:UserControl1">
<TextBlock Text="{TemplateBinding Text}"></TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
</UserControl>
PS:使用模板的话,建议直接使用定义自定义控件。
前言被询问的多了,所以写个记录下(下次就可以直接扔链接了)。先给示例代码 public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } // Using a DependencyProperty as the backing stor
Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了。用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架。依赖属性(DependencyProperty)是为用户控件提供可支持双向绑定的必备技巧之一,同样用处也非常广泛。
以下案例,为了图方便,我以之前的博客的基础为模板,直接进行开发。如有遇到疑问的地方,可以查看先前的博客(W...
<UserControl x:Class="DXApplication1.Control.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2...
一、首先添加一个简单自定义控件UserTestControl;
xaml代码如下,将背景色绑定依赖属性:
<UserControl x:Class="WpfApp1.UserTestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/win
依赖属性
".NET properties are nothing more than syntactic sugar over set and get methods."
我们知道.NET的属性只不过是get/set方法的语法糖衣。
"Dependency properties are the workhorse of WPF. This infrastructure provides f...
WPF实例系列一:登录、注册界面设计
文章目录WPF实例系列一:登录、注册界面设计前言一、实例演示1. 登录界面展示2. 注册界面展示3. 数据存储4. 效果演示二、结构及源码1.主界面跳转登录界面设计2.登录界面设计3.注册界面设计4.Excel保存数据类设计5.源码
本实例将展示利用WPF设计登录界面、注册界面,并实现相应的功能,其中账户数据将存储在excel表中。
一、实例演示
1. 登录界面展示
2. 注册界面展示
3. 数据存储
4. 效果演示
二、结构及源码
"用户控件"继承自UserControl,而UserControl继承自ContentControl,也就是内容控件
UserControl和Window是一个层次上的,都有xaml和cs文件
创建用户控件
写好用户控件
<UserControl x:Class="WpfDemo.UserControlDemo.OwnUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta
Binding 是前台UI(显示层)和后台代码(数据层)的桥梁。理论上当后台的数据变动时,显示的数据或样式应该随之而变。这些是动态的。
对于Binding的设置可以在前台Xaml,也可以在后台Code里面定义,但是既然Xaml可以做很多事情,那么所有对UI的操作我们都可以交给它。
其实,WPF的本身是一种数据驱动UI的设计模式,使用了MVVM(Model-View-ViewModel)的模式...
WPF(Windows Presentation Foundation)是一个用于构建Windows应用程序的框架,而UserControl是WPF中的一种自定义控件。
UserControl允许我们将多个现有的WPF控件组合在一起,形成一个新的、可重用的控件。通过创建自定义的UserControl,我们可以将一组相关的控件封装成一个单一的控件,以增强应用程序的可维护性和重用性。
创建自定义的UserControl通常有以下几个步骤:
1. 创建一个新的WPF用户控件项目,并定义UserControl的外观和布局。这可以通过在XAML文件中使用已有的WPF控件、布局容器和样式来完成。
2. 在UserControl的代码后台(Code-behind)文件中,可以定义一些附加的属性和方法,以增强UserControl的可定制性和功能。
3. 在UserControl中可以定义一些依赖属性(Dependency Properties),以允许开发者在使用UserControl时进行数据绑定和属性设置。
4. 在需要使用自定义UserControl的地方,可以将其直接添加到XAML中,并进行相关的属性设置和事件处理。
自定义的UserControl可以在整个应用程序中重复使用,从而提高了开发效率。通过UserControl的封装,我们可以将一组相关的功能和样式打包到单个控件中,简化了应用程序的UI设计和代码开发过程。
总而言之,WPF的自定义控件UserControl为开发者提供了一种简单且高效的方式来自定义和组合现有的WPF控件,以创建出更具可重用性和可维护性的应用程序。