#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, и я не могу добавить его более одного раза :-/