从MainWindow.xaml到达UserControl中元素的所有属性的最佳方法?

时间:2016-10-11 08:21:46

标签: c# wpf xaml

我是新手,所以我希望我的问题不是愚蠢的。

假设有一个简单的UserControl(称之为MyUC),就像这样

<UserControl x:Class="MyUC.MyUC"
         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:MyUC"
         mc:Ignorable="d" d:DesignWidth="311" Height="150">

  <Grid>
    <Label x:Name="_lbl1" Width="104" Height="26" Margin="13,23,0,0"/>
    <Label x:Name="_lbl2"  Width="104" Height="26" Margin="13,53,0,0"/>
  <Grid/>
<UserControl/>

如果我理解正确,如果我希望能够从MainWindow.xaml获取此UserControl(MyUC)中这些元素的属性(例如标签的内容),我将不得不在MyUC.xaml中添加这些属性的.cs

public static readonly DependencyProperty Label_1_ContentProperty =
 DependencyProperty.Register("Label_1_Content", typeof(string), typeof(MyUC));

Public string Label_1_Content
{
  get { return (string)GetValue(Label_1_ContentProperty); }
  set { SetValue(Label_1_ContentProperty, value); }
}

public static readonly DependencyProperty Label_2_ContentProperty =
 DependencyProperty.Register("Label_2_Content", typeof(string), typeof(MyUC));

Public string Label_2_Content
{
  get { return (string)GetValue(Label_2_ContentProperty); }
  set { SetValue(Label_2_Content_2_Property, value); }
}

将此绑定添加到MyUC.xalm

中的_lbl1和_lbl2内容
<Label x:Name="_lbl1" Width="104" Height="26" Margin="13,23,0,0"
       Content="{Binding Label_1_Content, RelativeSource={RelativeSource
                 AncestorType={x:Type local:MyUC}}}"/>

<Label x:Name="_lbl2" Width="104" Height="26" Margin="13,53,0,0"
       Content="{Binding Label_2_Content, RelativeSource={RelativeSource
                 AncestorType={x:Type local:MyUC}}}"/>

然后这些标签属性是可以访问的,可以像MainWindow.xalm一样设置

<control:MyUC Label_1_Content="This is the Label _lbl1 in the UserControl"
              Label_2_Content="This is the Label _lbl2 in the UserControl"/>

但我认为这不是一个好方法,因为如果UserControl中有多个属性我需要 要达到,那么将需要很多依赖属性。

我的问题是:是否可以更简单地使用每个标签(_lbl1和_lbl2)直接拥有属性,并且能够在MainWindow.xaml中执行类似这样的操作

<control:MyUC _lbl1.Content="This is the Label _lbl1 in the UserControl"
              _lbl2.Content="This is the Label _lbl2 in the UserControl"/>

如果在这种情况下应该怎么做或者如果不可能那么我该怎么办呢?

感谢任何帮助

0 个答案:

没有答案