WPF Получают владельца UserControl

В примере Вы представляете единственную создаваемую вещь, атрибут...

XmlElement element = (XmlElement)doc.SelectSingleNode("/feed/entry/content");
if (element != null)
    element.SetAttribute("source", "");

, Если то, что Вы действительно хотите, должно смочь создать иерархию, где она не существует затем, Вы могли свой собственный простой xpath синтаксический анализатор. Я не знаю о хранении атрибута в xpath все же. Я скорее снял узел в качестве элемента и гвоздя на.SetAttribute, поскольку я сделал здесь:


static private XmlNode makeXPath(XmlDocument doc, string xpath)
{
    return makeXPath(doc, doc as XmlNode, xpath);
}

static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath)
{
    // grab the next node name in the xpath; or return parent if empty
    string[] partsOfXPath = xpath.Trim('/').Split('/');
    string nextNodeInXPath = partsOfXPath.First();
    if (string.IsNullOrEmpty(nextNodeInXPath))
        return parent;

    // get or create the node from the name
    XmlNode node = parent.SelectSingleNode(nextNodeInXPath);
    if (node == null)
        node = parent.AppendChild(doc.CreateElement(nextNodeInXPath));

    // rejoin the remainder of the array as an xpath expression and recurse
    string rest = String.Join("/", partsOfXPath.Skip(1).ToArray());
    return makeXPath(doc, node, rest);
}

static void Main(string[] args)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<feed />");

    makeXPath(doc, "/feed/entry/data");
    XmlElement contentElement = (XmlElement)makeXPath(doc, "/feed/entry/content");
    contentElement.SetAttribute("source", "");

    Console.WriteLine(doc.OuterXml);
}
11
задан Dave Clemmer 13 January 2013 в 19:09
поделиться

3 ответа

Я придумал это решение, но напишите, если у вас есть лучшее решение. Спасибо!

DependencyObject ucParent = this.Parent;

while (!(ucParent is UserControl))
{
    ucParent = LogicalTreeHelper.GetParent(ucParent);
}
18
ответ дан 3 December 2019 в 06:46
поделиться

UserControl имеет свойство .Parent, которое должно предоставить вам доступ к его родительскому объекту.

Затем вы можете преобразовать его в свой объект ParentUC.

0
ответ дан 3 December 2019 в 06:46
поделиться

Вы всегда можете использовать VisualTreeHelper.GetParent (child) , чтобы вернуть родительский элемент в визуальном дереве (родительский пользовательский элемент управления из вложенного пользовательского элемента управления).

0
ответ дан 3 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: