Я склонен находить, что большинство разработчиков C# не знает о 'nullable' типах. В основном, примитивы, которые могут иметь нулевое значение.
double? num1 = null;
double num2 = num1 ?? -100;
Набор nullable двойное, num1, к пустому указателю, затем установил двойного постоянного клиента, num2, к num1 или -100 , если num1 был пустым.
http://msdn.microsoft.com/en-us/library/1t3y8s4s (По сравнению с 80) .aspx
еще одна вещь о типе Nullable:
DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();
это - возвращаемая строка. Пустой. Проверьте этот ссылка для получения дополнительной информации
Чтобы знать, что делать с вложенными объектами разметки, синтаксический анализатор XAML, среди прочего, будет проверять, определяет ли класс .NET свойство «содержимого» по умолчанию для использования в качестве контейнера. для таких детей. Это делается с помощью атрибута ContentPropertyAttribute.
В вашем случае, поскольку я предполагаю, что вы хотите, чтобы вложенные объекты находились внутри сетки, и поскольку дочерние элементы сетки входят в коллекцию свойств «Дети», вам просто нужно сделать следующее:
[ContentProperty("Children")]
public partial class ElementType : Grid
{
// your code here...
}
Если вам нужно выполнить некоторую логику при добавлении дочерних элементов к вашему элементу управления (например, разрешить только определенным типам быть дочерними элементами вашего элемента управления ElementType), вы можете вместо этого унаследовать от IAddChild и реализовать методы AddChild и AddText.
Что касается проблемы именования, кажется, что только не выглядящие элементы управления могут иметь имена дочерних элементов в экземпляре области. Таким образом, вы можете давать имена дочерним элементам внутри ElementType.xaml, но не именовать дочерние элементы в другой разметке, где вы создаете экземпляр ElementType. Я думаю, это из-за того, как они оптимизируют логическое дерево или что-то в этом роде. С другой стороны, незаметный элемент управления - это элемент управления, содержащий только код. Итак, если вы превратите свой класс в простой старый пустой подкласс Grid, он заработает:
public class ElementType : Grid
{
}
Ура! Меньше кода!
If you want one within the other, you'd want to put the inner one in the Content property of the first:
<local:ElementType x:Name="FirstElementName">
<local:ElementType.Content>
<local:ElementType x:Name="SecondElementName" Grid.Column="1" Grid.Row="1" />
</local:ElementType.Content>
</local:ElementType>
Also, I'm not sure what you are trying to accomplish here, but I fear it.