Поддерживает текстовое содержимое в элементе управления Silverlight?

#c# #silverlight #xaml #text

#c# #silverlight #xaml #текст

Вопрос:

мой элемент управления silverlight может поддерживать передачу данных в него следующим образом:

 <MyControl>
<OtherControl/>
</MyControl>
  

Но если я сделаю это:

 <MyControl>
THIS IS TEXT
</MyControl>
  

и при попытке запустить его я получаю сообщение об ошибке:

MyControl не поддерживает текстовое содержимое. [Строка: 142 Позиция: 72]

Свойство item MyControl должно поддерживать все как объект, поэтому оно может поддерживать текстовые поля, кнопки и другие элементы управления. но если я попытаюсь передать только необработанный текст, это не сработает.

Я знаю, что это должно быть выполнимо, мой единственный вопрос — как?

Комментарии:

1. Я точно не знаю, но это было что-то вроде того, как в OnApplyTemplate смотрите, содержит ли он строку. Если это произойдет, оберните строку в текстовое поле и добавьте ее в элемент управления.

Ответ №1:

Вы должны получить свой элемент управления из ContentControl следующим образом:

 public class SimpleControl : ContentControl {

}
  

 <local:SimpleControl>
    Some Text...
</local:SimpleControl>

<local:SimpleControl>
    <Button Content="Button" />
</local:SimpleControl>
  

Ответ №2:

вы должны определить свойство зависимости для вашего элемента управления, которое вы можете использовать из привязки для вашего элемента управления. смотрите следующий код:

 public class customtextbox : UserControl
{
    public static readonly DependencyProperty TextProperty =
        TextBox.TextProperty.AddOwner(typeof(customtextbox));
    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
}
  

и вы устанавливаете свойство Text :

 <CT:customtextbox Text="somthing"/>  OR
<CT:customtextbox Text="{Binding  mypropertyinviewmodel}"/>
  

Ответ №3:

Вам нужно сообщить компилятору, какое свойство вашего класса должно использоваться для содержимого между тегами в XAML.

Допустим, свойство, которое вы хотите использовать, является

 public string Title { get; set; }
  

Над вашим определением класса вам нужно добавить атрибут ContentProperty следующим образом:

 [ContentProperty("Title")]
public class MyControl
{
    // class code
}
  

Комментарии:

1. У меня уже есть свойство cotnentproperty для объектов с именем Item, и я не могу добавить его более одного раза :-/