Присоедините свойство к usercontrol и обновите его во время разработки - PullRequest
3 голосов
/ 22 марта 2012

Как я могу создать пользовательский элемент управления, такой как Textbox? Например, когда я изменяю свойство Text элемента управления Textbox, в окне, с которым я сейчас работаю, появляется новый текст.

В моем проекте у меня много мест, где пользователь должен вводить информацию, поэтому я хочу создать пользовательский элемент управления InputField. (этот usercontrol состоит из метки и текстового поля с пользовательским стилем)

Вот xaml для моего пользовательского контроля:

<UserControl x:Class="PDV.UserControls.InputField"
         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" >
   <Grid>
      <StackPanel>
          <Label Content="{Binding Path=LblContent}" HorizontalAlignment="Left" VerticalAlignment="Top"  />
          <TextBox Height="23" Margin="5,-5,2,2" Name="textBox1" VerticalAlignment="Top" />
      </StackPanel>
   </Grid>
</UserControl>

и код этого пользовательского элемента управления:

namespace PDV.UserControls
{
    public partial class InputField : UserControl
    {
        public static DependencyProperty MessageProperty = DependencyProperty.Register(
            "LblContent", typeof(string), typeof(UserControl));

        public string LblContent{
            get{
                return (string)GetValue(MessageProperty);
            }
            set{
                SetValue(MessageProperty, value);
            }
        }

        //Constructor
        public InputField(){
            InitializeComponent();
            this.DataContext = this;
        }
    }
}

, поэтому в моем главном окне я смогу использовать этот пользовательский элемент управления:

1) импорт пространства имен, в котором находится пользовательский элемент управления:

  xmlns:myCtrl ="clr-namespace:PDV.UserControls"

2) поместить этот элемент управления в это окно:

  <myCtrl:InputField LblContent="hello" Margin="0,0,483,0" Height="49" VerticalAlignment="Top"></myCtrl:InputField>

Что мне нужно сделать, чтобы при обновлении LblContent="hello" оно отображалось в окне? Было бы хорошо, чтобы оно отображалось во время разработки, а не только во время выполнения

1 Ответ

1 голос
/ 22 марта 2012

Я думаю, что вторым типом может быть InputField public static DependencyProperty MessageProperty = DependencyProperty.Register ("LblContent", typeof (string), typeof (InputField));

Я никогда не пытаюсь установить DataContextпо-вашему, в конце концов попытайтесь дать имя в usercontrol x: Name = "Root", а затем измените привязку следующим образом: Content = "{Binding Path = LblContent, ElementName = Root}"

...