私が遭遇した問題があり、それを防ぐことが可能かどうかはわかりません。私はそれがデフォルトでこれのように設計されています。WPF IsSelectedは、子を選択するときにトリガーを防止します。
Iは、選択された場合、いくつかのテキストボックスを充填され、XML及びこれらノードの各々によって充填されるツリービューリストを符号化しています。そのタイプに応じて、異なる機能がトリガーされます。
問題は、子供を選択すると、すべての親のツリービューアイテム「トップセラー」がトリガーされて、関連する機能がトリガーされてしまい、その必要がないということです。
IsSelectedのために、この「逆継承のソート」を防ぐために、どのように任意のアイデア?
例:「ノード」を選択すると、「Node_Selected」、「Dialog_Selected」、「Actor_Selected」がトリガーされます。
ありがとうございました。
敬具、ジャストコンテキストの
:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
XmlDocument document = new XmlDocument();
document.Load("XML/ActorsDialogs.xml");
XmlNodeList actors = document.SelectNodes("/dialogs/actor");
foreach (XmlNode actor in actors)
{
TreeViewItem newActor = new TreeViewItem();
newActor.Header = actor.SelectSingleNode("actorname").InnerText;
newActor.Selected += new RoutedEventHandler(Actor_Selected);
XmlNodeList dialogs = actor.SelectNodes("dialog");
foreach (XmlNode dialog in dialogs)
{
TreeViewItem newdialog = new TreeViewItem();
newdialog.Header = "Dialog:" + dialog.SelectSingleNode("dialogID").InnerText;
newdialog.Selected += new RoutedEventHandler(Dialog_Selected);
BuildNodes(newdialog, dialog);
newActor.Items.Add(newdialog);
}
ActorsList.Items.Add(newActor);
}
}
private void BuildNodes(TreeViewItem treeNode, XmlNode parentElement)
{
foreach (XmlNode child in parentElement.ChildNodes)
{
if (child.Name == "node" || child.Name == "reply")
{
XmlElement childElement = child as XmlElement;
TreeViewItem childTreeNode = new TreeViewItem();
string ID = child.SelectSingleNode(child.Name + "ID").InnerText;
childTreeNode.Header = childElement.Name + ":" + ID;
switch (child.Name)
{
case "node":
childTreeNode.Selected += new RoutedEventHandler(Node_Selected);
break;
case "reply":
childTreeNode.Selected += new RoutedEventHandler(Reply_Selected);
break;
default:
break;
}
treeNode.Items.Add(childTreeNode);
BuildNodes(childTreeNode, childElement);
}
}
}
private void Actor_Selected(object sender, RoutedEventArgs e){}
private void Dialog_Selected(object sender, RoutedEventArgs e){}
private void Node_Selected(object sender, RoutedEventArgs e){}
private void Reply_Selected(object sender, RoutedEventArgs e){}
は、あなたが発生し、選択されたノードをしたいですが、ダイアログや俳優選択されていませんか?あれは正しいですか?私の例では – phil
、はい。 Dialog_SelectedがDialogに選択された場合、Dialog_Selectedだけが発生します。そう正確に正しい答えです –