如何从wpf用户控件设置公共变量值?

时间:2017-03-23 15:43:29

标签: c# wpf xaml

我有一个包含wpf用户控件的dll。

我在另一个wpf项目中有一个wpf窗口,其中包含上述用户控件。

我在wpf用户控件中有两个公共属性。

我想从添加了wpf用户控件的wpf窗口设置这些属性。

我尝试使用依赖属性执行此操作,如下所示:

TestUserControl.xaml: -

<UserControl x:Class="TestDependencyProperty.TestUserControl"
             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" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Label Content="test property" x:Name="lblTestProperty"/>
    </Grid>
</UserControl>

TestUserControl.xaml.cs: -

using System.ComponentModel;
using System.Windows;

namespace TestDependencyProperty
{
    /// <summary>
    /// Interaction logic for TestUserControl.xaml
    /// </summary>
    public partial class TestUserControl
    {
        public TestUserControl()
        {
            InitializeComponent();
            SetLabelText();
        }

        private void SetLabelText()
        {
            lblTestProperty.Content = TestProperty;
        }

        public static readonly DependencyProperty TestDependencyProperty =
            DependencyProperty.Register("TestProperty",
                typeof(string),
                typeof(TestUserControl));

        [Bindable(true)]
        public string TestProperty
        {
            get 
            {
                return (string)this.GetValue(TestDependencyProperty);
            }
            set 
            {
                this.SetValue(TestDependencyProperty, value);
            }
        }
    }

MainWindow.xaml: -

<Window x:Class="TestDependencyProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:local="clr-namespace:TestDependencyProperty"
        >
    <Grid>
        <local:TestUserControl x:Name="ucTest" TestProperty="HelloWorld"/>
    </Grid>
</Window>

我期待一个内容为“HelloWorld”的标签。

那么有人可以告诉我该怎么做吗?

感谢。

1 个答案:

答案 0 :(得分:0)

用户控制XAML:

<UserControl x:Class="TestDependencyProperty.TestUserControl"
             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:WpfApplication3"
             DataContext="{Binding RelativeSource={RelativeSource Self}}"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Label Content="{Binding TestProperty}" x:Name="lblTestProperty"/>
    </Grid>
</UserControl>

用户控制码:

    public partial class TestUserControl : UserControl
    {
        public TestUserControl()
        {
            InitializeComponent();
        }

        public static readonly DependencyProperty TestDependencyProperty =
            DependencyProperty.Register("TestProperty",
                typeof(string),
                typeof(TestUserControl));

        [Bindable(true)]
        public string TestProperty
        {
            get
            {
                return (string)this.GetValue(TestDependencyProperty);
            }
            set
            {
                this.SetValue(TestDependencyProperty, value);
            }
        }
}

您不需要 SetLabelText();

窗口托管用户控件

<local:TestUserControl TestProperty="Test Text" x:Name="MyNewUserControl" />
如果需要,在代码后面

MyNewUserControl.TestProperty="New Value";

依赖项属性内置了更改通知,因此一旦属性绑定到它们,它将在属性发生时自动更新。