添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

场景一:在创建wpf 用户控件的时候,需要在Xaml里使用该控件的自定义属性等。

解决方案一:可以通过属性绑定,查找绑定自定义属性;

解决方案二:可以将该用户控件的DataContext绑定自身;

以下为实现方式:

方案一(查找绑定自定义属性):

缺点:每个属性的绑定都需要写长长的一串筛选条件,看起来并不简洁;

   public partial class UcTest : UserControl
        public UcTest ()
            InitializeComponent();
        public string UcProperty
            get { return (string)GetValue(UcPropertyProperty); }
            set { SetValue(UcPropertyProperty, value); }
        public static readonly DependencyProperty UcPropertyProperty =
            DependencyProperty.Register("UcProperty", typeof(string), typeof(UcTest), new PropertyMetadata(""));
<UserControl x:Class="Test.UcTest"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:my="clr-namespace:Test">
    <StackPanel>
        <TextBlock Text="{Binding RelativeSource={RelativeSource Mode= FindAncestor,  AncestorType={x:Type my:UcTest}}, Path=UcProperty}" />
    </StackPanel>
</UserControl>

方案二(绑定DataContext):

绑定DataContext也有两种绑定方式,如下所示:

方式一:(后台绑定)在构造函数里添加绑定:

缺点:该方式在Xaml绑定属性时没有智能提示;

优点:相对方案一,更为简洁;

this.DataContext = this;
   public partial class UcTest : UserControl
        public UcTest ()
            InitializeComponent();
            this.DataContext = this;
        public string UcProperty
            get { return (string)GetValue(UcPropertyProperty); }
            set { SetValue(UcPropertyProperty, value); }
        public static readonly DependencyProperty UcPropertyProperty =
            DependencyProperty.Register("UcProperty", typeof(string), typeof(UcTest), new PropertyMetadata(""));
<UserControl x:Class="Test.UcTest"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:my="clr-namespace:Test">
    <StackPanel>
        <TextBlock Text="{Binding UcProperty}" />
    </StackPanel>
</UserControl>

方式二:(前台绑定/Xaml绑定)在Xaml里,想要绑定的属性的节点的上级以上的节点进行绑定:

优点:1.相对方案一,更为简洁;2.在Xaml绑定属性时有智能提示;

   public partial class UcTest : UserControl
        public UcTest ()
            InitializeComponent();
        public string UcProperty
            get { return (string)GetValue(UcPropertyProperty); }
            set { SetValue(UcPropertyProperty, value); }
        public static readonly DependencyProperty UcPropertyProperty =
            DependencyProperty.Register("UcProperty", typeof(string), typeof(UcTest), new PropertyMetadata(""));
<UserControl x:Class="Test.UcTest"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:my="clr-namespace:Test" >
    <StackPanel DataContext="{Binding RelativeSource={RelativeSource Mode= FindAncestor,  AncestorType={x:Type my:UcTest}}">
        <TextBlock Text="{Binding UcProperty}" />
    </StackPanel>
</UserControl>

方式三:(前台绑定/Xaml绑定)在Xaml里,给根元素进行命名,绑定属性的节点通过Element进行绑定:

优点:1.相对方案一,更为简洁;2.在Xaml绑定属性时有智能提示;3.与方式二相比略为简洁;

   public partial class UcTest : UserControl
        public UcTest ()
            InitializeComponent();
        public string UcProperty
            get { return (string)GetValue(UcPropertyProperty); }
            set { SetValue(UcPropertyProperty, value); }
        public static readonly DependencyProperty UcPropertyProperty =
            DependencyProperty.Register("UcProperty", typeof(string), typeof(UcTest), new PropertyMetadata(""));
<UserControl x:Class="Test.UcTest"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:my="clr-namespace:Test"
             x:Name="current"  >
    <StackPanel>
        <TextBlock Text="{Binding ElementName=current,Path=UcProperty}" />
    </StackPanel>
</UserControl>
<!--============================================================-->
<UserControl x:Class="Test.UcTest"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:my="clr-namespace:Test"
             x:Name="current"  >
    <StackPanel DataContext="{Binding ElementName=current}">
        <TextBlock Text="{Binding UcProperty}" />
    </StackPanel>
</UserControl>
场景一:在创建wpf 用户控件的时候,需要在Xaml里使用该控件的自定义属性等。解决方案一:可以通过属性绑定,查找绑定自定义属性;解决方案二:可以将该用户控件的DataContext绑定自身;以下为实现方式:方案一(查找绑定自定义属性):缺点:每个属性的绑定都需要写长长的一串筛选条件,看起来并不简洁; public partial class UcTest : Use...
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presen
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...
一、首先添加一个简单自定义控件UserTestControlxaml代码如下,将背景色绑定依赖属性: <UserControl x:Class="WpfApp1.UserTestControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/win /// <param name="this">字节</param> /// <param name="index">Bit的索引值(0-7)</param> /// <returns></returns> publi
WPF(Windows Presentation Foundation)是一个用于构建Windows应用程序的框架,而UserControlWPF中的一种自定义控件。 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控件,以创建出更具可重用性和可维护性的应用程序。