2012-03-21 3 views
3

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

В моем проекте у меня есть много мест, где пользователь должен вводить информацию, поэтому я хочу создать пользовательский элемент управления 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" это оказывает на окно? Это будет хорошо для него, чтобы сделать во время разработки не только во время выполнения

+0

Вы уверены, что вам нужен пользовательский элемент управления для ярлыка и текстового поля. Вы можете применить стиль к своей Label и TextBox. И ярлык будет отображаться во время разработки. К тому моменту, когда вы добавляете синтаксис для привязки TextBox, вы не сохраняете много нажатий клавиш и в моем коде зрения, который сложнее выполнить. – Paparazzi

+0

Да, я пытался понять это. Метка и текстовое поле должны находиться внутри панели стека. Я пытался выяснить, как создать стиль для панели стека, чтобы его дети могли иметь определенный стиль, а не создавать стиль для текстового поля ярлыка и панели стека. Каждый раз, когда я нуждался в новом поле ввода, мне пришлось разместить три элемента управления, а не просто управлять пользователем. –

ответ

1

Я думаю, что второй тип может быть InputField общественности статической DependencyProperty MessageProperty = DependencyProperty.Register ( «LblContent», TypeOf (строка), TypeOf (InputField));

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

+0

Почему вы удалили ответ, это было полезно LOL. Спасибо –

+0

Потому что я видел, что вы управляете datacontext по-другому, но я ввел тот же комментарий в новый пост. Да, я могу отредактировать его, ты прав – pluka

Смежные вопросы