Как я могу вложить пользовательские элементы XAML?

Я склонен находить, что большинство разработчиков 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();

это - возвращаемая строка. Пустой. Проверьте этот ссылка для получения дополнительной информации

6
задан Giffyguy 23 July 2009 в 17:35
поделиться

2 ответа

Чтобы знать, что делать с вложенными объектами разметки, синтаксический анализатор 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
{
}

Ура! Меньше кода!

5
ответ дан 17 December 2019 в 02:32
поделиться

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.

1
ответ дан 17 December 2019 в 02:32
поделиться