我在MainPage上有System.Windows.Controls的TreeView控件。
<controls:TreeView x:Name="Tree"
SelectedItemChanged="Tree_SelectedItemChanged" />
MainPage ctor看起来像这样:
public MainPage()
{
InitializeComponent();
for (int i = 0; i < 10; ++i)
Tree.Items.Add(new TreeViewItem() { Header = i.ToString() } );
(Tree.Items[0] as TreeViewItem).IsSelected = true;
}
只需填写TreeView并选择第一个元素。
在Tree_SelectedItemChanged中我想对选择项执行一些操作,但Tree.SelectedItem的值为空。
我不明白为什么会这样。 Wpf中的TreeView工作正常。
你有什么想法吗?
答案 0 :(得分:1)
private void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
object SelectedValue;
if (Tree.SelectedValue == null)
{
foreach (object ti in Tree.Items)
{
if (((TreeViewItem)ti).IsSelected)
{
SelectedValue = ti;
break;
}
}
}
else
{
SelectedValue = Tree.SelectedValue;
}
}
或者您也可以使用Tree.SelectedValue == null
代替bool
。 isFirstLoad
或类似的东西!
Stange问题是......
答案 1 :(得分:0)
这实际上取决于你何时查看发生的触发器。如果你第一次看到触发器[即当您设置(Tree.Items[0] as TreeViewItem).IsSelected = true;
并在该阶段有断点时,您将选择项目为null
。原因是;触发发生以设置第一个选定的项目。
出于兴趣,我将代码改为此。
for (int i = 0; i < 10; ++i)
Tree.Items.Add(new TreeViewItem() { Header = i.ToString(), Name = i.ToString()});
(Tree.Items[0] as TreeViewItem).IsSelected = true;
我在Tree_SelectedItemChanged
事件中放置了一个断点,并在您设置(Tree.Items[0] as TreeViewItem).IsSelected = true;
后立即触发。在此之前,所选项目将为空。
如果安装了Toolkit,您还可以引用 System.Windows.Controls.Toolkit 。然后,您可以访问方法Tree.SelectItem(Tree.Items[0])
。它并没有解决这个事实,即最初它是null,但它也不会触发选定的项目触发器。
但是,每次我从那里开始更改选择时,所选项目都是正确的。
希望这有帮助。