Ich versuche, auf das TreeViewitem zuzugreifen, das mit HierarchicalDataTemplate basierend auf dem Name der Kopfzeile erstellt wird. Auch ich möchte auf das Steuerelement innerhalb (in diesem Fall Rechteck) das TreeViewitem zugreifen und seine Farbe ändern. Ich habe viele Möglichkeiten ausprobiert, aber keinen Erfolg. Unten ist mein Code. Ich erzeuge Treeview mit benutzerdefinierten Klasse und XML.Zugriff auf TreeViewitem von HierarchicalDataTemplate in WPF
public partial class Window1 : Window
{
ObservableCollection<Step> TreeViewTemplate;
public Window1()
{
TreeViewTemplate = new ObservableCollection<Step>();
InitializeComponent();
SetDataTemplate("NEWSITECOPPER_PROPOSAL", "Proposal");
tvMain.ItemsSource = TreeViewTemplate;
getTreeViewItem();
}
private void getTreeViewItem()
{
TreeViewItem item = (TreeViewItem)(tvMain.ItemContainerGenerator.ContainerFromItem(tvMain.Items[3]));
}
private void SetDataTemplate(string ProcessName, string journeyName)
{
try
{
TreeViewTemplate.Clear();
//XDocument xDoc = XDocument.Load(@"C:\Users\606347769\Desktop\Hemil\Others\TreeView\TreeView\Data.xml");
XDocument xDoc = XDocument.Load(@"C:\Users\606347769\Documents\Visual Studio 2008\Projects\TestAPplication\WpfApplication1\ProcessJourneyCriteria.xml");
var JourneySteps = xDoc.Elements("ProcessAreas").Elements("Process").Where(x =>
x.Attribute("name").Value == ProcessName).Select(y =>
y.Elements("Journey").Where(k => k.Attribute("name").Value == journeyName));
var FinalSteps = JourneySteps.FirstOrDefault();
FinalSteps.Elements("Step").ToList<XElement>().ForEach(x =>
{
string key = x.Attribute("name").Value;
ObservableCollection<ChildStep> value = new ObservableCollection<ChildStep>();
x.Elements("ChildStep").ToList<XElement>().ForEach(y =>
{
ObservableCollection<GrandChildStep> GC = new ObservableCollection<GrandChildStep>();
y.Elements("GrandChildStep").ToList<XElement>().ForEach(k =>
{
GC.Add(new GrandChildStep { Name = k.Attribute("name").Value });
});
value.Add(new ChildStep { Name = y.Attribute("name").Value, GrandChildStep = GC });
});
TreeViewTemplate.Add(new Step { Name = key, ChildStep = value });
});
}
catch (Exception)
{
}
}
}
Unten ist die benutzerdefinierte Klasse i
erstellt habenclass Step
{
public string Name { get; set; }
public System.Collections.ObjectModel.ObservableCollection<ChildStep> ChildStep { get; set; }
}
class ChildStep
{
public string Name { get; set; }
public System.Collections.ObjectModel.ObservableCollection<GrandChildStep> GrandChildStep { get; set; }
}
class GrandChildStep
{
public string Name { get; set; }
}
Ich habe ein ähnliches Problem bei der Verwendung von HierarchicalDataTemplate konfrontiert. Einfache Lösung ist das Hinzufügen einer isSelected-Eigenschaft und das Binden an isSelected-Eigenschaft von treeviewItem, wenn Sie den Knoten in UI auswählen. Bitte sagen Sie mir, wie Sie den Namen der Kopfzeile bekommen. Ist es auf Klick auf den Knoten? – Kumar