在开发WPF UserControls时,将子控件的DependencyProperty公开为UserControl的DependencyProperty的最佳方法是什么? 以下示例显示了我当前如何在UserControl中公开TextBox的Text属性。 当然有更好/更简单的方法来实现这一目标?

<UserControl x:Class="WpfApplication3.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Background="LightCyan">
        <TextBox Margin="8" Text="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
    </StackPanel>
</UserControl>


using System;
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication3
{
    public partial class UserControl1 : UserControl
    {
        public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(UserControl1), new PropertyMetadata(null));
        public string Text
        {
            get { return GetValue(TextProperty) as string; }
            set { SetValue(TextProperty, value); }
        }

        public UserControl1() { InitializeComponent(); }
    }
}

===============>>#1 票数:17 已采纳

这就是我们在没有RelativeSource搜索的情况下在团队中执行此操作的方式,而是通过UserControl的名称命名UserControl和引用属性。

<UserControl x:Class="WpfApplication3.UserControl1" x:Name="UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Background="LightCyan">
        <TextBox Margin="8" Text="{Binding Path=Text, ElementName=UserControl1}" />
    </StackPanel>
</UserControl>

有时我们发现自己制造了太多的UserControl,但往往会缩减我们的使用量。 我也遵循沿着PART_TextDisplay或类似的方式命名像文本框之类的东西的传统,以便将来你可以模板化它,但保持代码隐藏相同。

===============>>#2 票数:1

你可以在UserControl的构造函数中将DataContext设置为this,然后只用path绑定。

CS:

DataContext = this;

XAML:

<TextBox Margin="8" Text="{Binding Text} />

  ask by Joseph Sturtevant translate from so

未解决问题?本站智能推荐:

2回复

在UserControl本身中指定DependencyProperty的绑定

继续我的上一个问题( 根据ViewModel属性更改画笔 ) 在我的UserControl中,我有一个DependencyObject 。 我想将该对象绑定到我的ViewModel的属性。 在这种情况下, CarViewModel属性名称为Status并返回一个枚举值。 我需要
2回复

将UserControl绑定到其自己的dependencyProperty不起作用

我有一个问题,当我将该对象设置为数据绑定时,我无法创建使用自定义对象属性的用户控件。 试着解释一下我的意思是代码。 自定义对象: 用户控制代码背后: 用户控制XAML: 所以我期望MyControl显示一个TextBlock,文本显示MyObj.Text中的任何
2回复

在自定义用户控件的DependencyProperty上绑定不更新更新

我在自定义用户控件上进行数据绑定时遇到了困难。 我创建了一个示例项目来突出我的问题。 我是WPF的新手,也是MVVM的新手,所以请耐心等待...... 我创建了一个使用数据绑定两种方式的简单视图。 内置控件上的数据绑定工作正常。 我的自定义控件没有......我在我的控件的Prop
1回复

并非每次都触发UserControl DependencyProperty中的WPF PropertyChanged

我一直在研究以下情况很多小时:我有一个xaml定义的窗口,该窗口利用了具有某些依赖项属性的usercontrol(ToggleButton)。 窗口的基础视图模型包含一些布尔对象,这些布尔对象表示设备的状态(打开/关闭),而其他布尔对象则表示一个请求,以使用真/假侧面切换设备(将PLC连接
1回复

WPF-绑定到自定义UserControl的DependencyProperty不起作用

我目前正在使用窗口(带有ViewModel)和我自己的UserControl的MVVM项目上工作。 .xaml文件中的UserControl几乎为空,因为它的所有功能均来自代码后方,后者可绘制不同的形状。 我想将ViewModel的属性绑定到UserControl中的DependencyPr
1回复

WPF嵌套依赖项属性值强制

我已经建立了一个UserControl用于选择Color用DependencyProperty选定颜色,以及CoerceValueCallback是确保选择的颜色是完全不透明和通透明亮。 如果我将此控件添加到窗口中,并将该窗口的背景色绑定到该控件的选定color属性,则一切都会按我的预期进行。
1回复

在WPF的父UserControl中公开DataGrid SelectedItem

我有一个带有数据网格的用户控件,可以在几个不同的页面中重复使用,并且正在使用MV-VM。 我如何/有可能将数据网格的SelectedItem依赖项属性公开为包含它的用户控件上的依赖项属性??? 目的是在使用控件的Page中,我可以将Grid的SelectedItem绑定到Page的视
2回复

WPF UserControl公开内部列表项

我试图编写一个UserControl来显示项目列表,其中每个项目都是标题和一组复选框。 整体将代表一种数据形式,其中填写该数据的人正在回答一个具有1到4值的问题列表。 所有这些都能很好地绑定到窗口的ViewModel。 但是我目前在UserControl中得到了硬编码的答案,如下所示:
1回复

如何公开属于用户控件的控件的属性(DependencyProperty)

我向正在创建的用户控件中添加了一些自定义按钮。 在这些按钮中的某些按钮上,我想向最终用户公开其可见性属性,以允许他们决定是否希望它们可见。 如何做到这一点? 谢谢
1回复

UserControl中公开的DependencyProperty,但无法绑定

我已经在论坛中搜索了解决方案。 有几个类似的问题和解决方案,但我无法真正理解它们。 请原谅我再次询问...:P 让我解释一下我的设置...我有一个UserControl,它是与Main应用程序分开开发的dll。 在这个相当复杂的UserControl中,我有几个子控件。 其中之一是