파일 시스템의 TreeView를 작성하려고합니다 (노드는 디렉토리이고, 나뭇잎은 파일 임).선택한 WPF treeviewitem이 실행되지 않습니다 (및 기타 문제)
나는 데이터 바인딩을 할 xaml을 가지고 있지만, TreeViewItem selected 이벤트를 발생시킬 수 없다. 그렇지 않으면 발견 할 수 없다.
<Window x:Class="List.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:List"
xmlns:dmodels="clr-namespace:List.DataModels"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<HierarchicalDataTemplate DataType="{x:Type dmodels:DirectoryNode}" ItemsSource="{Binding Children}">
<TreeViewItem FontSize="16" FontWeight="Bold" Header="{Binding Path=DisplayName}" Selected="TVI_Selected" >
<TextBlock Text="Please Wait..." MouseDown="Listbox1_MouseLeftButtonDown" />
</TreeViewItem>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type dmodels:FileNode}">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="20,0,0,0" Text="{Binding Path=DisplayName}" FontWeight="Bold" MouseDown="Listbox1_MouseLeftButtonDown" />
</StackPanel>
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
<Grid>
<TreeView x:Name="myTree" ItemsSource="{Binding Files}" SelectedItemChanged="TreeSelectionChanged" >
</TreeView>
</Grid>
</Window>
은 내가 '노드 (디렉토리)'(나는 확장기 전환을 얻을 수 있도록)를 TreeViewItem로 표시가 있지만, 그것을 클릭하거나 두 번 클릭하거나 때 TVI_Selected 메서드가 호출되지 않습니다 . Leaf (파일) '을 클릭하거나 두 번 클릭하면 TreeSelectionChanged 메서드가 호출되지만 TreeViewItem (확장기 토글을 표시하지 않음)이 아닙니다.
"Please Wait ..."를 적절한 하위 데이터로 바꿀 수 있도록 Selected 이벤트를 가로 채고 싶습니다.
저는이 말을 처음 접했기 때문에 무언가 어리석은 일을하고 있거나 나쁘게 만하거나 또는 그걸 얻지 못할 확률이 높습니다. 더 좋은 방법이 있다면, 그것을 듣고.
private void TVI_Selected (object sender, RoutedEventArgs e)
{
Console.WriteLine (" TreeViewItem selection Changed ");
}
private void TreeSelectionChanged (object sender, RoutedPropertyChangedEventArgs<Object> e)
{
//Perform actions when SelectedItem changes
BaseNode node = e.NewValue as BaseNode;
if (node != null)
{
string str = node.DisplayName;
string s2 = (node.IsDirectory == true) ? "Directory" : "File";
Console.WriteLine (" tree selection = {0} is a {1}", str, s2);
}
}
고마워요,하지만 그것 없이는 HDT에 TreeViewItem을 넣었습니다. 표시가 + (확장 토글)를 얻을 수 없었기 때문입니다. 그리고 포장이 풀린다면 왜 TreeViewItem이 존재합니까? 나는 똑똑한 사람이 되려고 노력하지 않고있다. 나는 이것을 얻지 못하고있다. 나는 당신이 준 링크를 다시 보게 될 것이다. (나는 믿는다.) 감사! –
자녀 항목을 정의하지 않았기 때문에 '+'가 표시되지 않았을 수 있습니까? 'TreeViewItem'은'ListBoxItem', 또는'MenuItem'처럼 데이터 객체의 '컨테이너'로서 존재합니다. 우리는 데이터 내용과 별도로 컨테이너를 스타일링하고 조작 할 수 있습니다 ... 매우 유용합니다. 예를 들어, 컨테이너에는 항상 유용한 IsSelected 속성이있어 어떤 데이터 항목이 선택되었는지 알 수 있습니다. – Sheridan
예 - 존재했던 동안 어린이가 비었기 때문에 +가 표시되지 않았습니다. 이제 '더미'항목에 대한 필요성이 생겼습니다 (다소 어수선하고 그렇습니까?). 고마워요 - (아기 단계) 진행하고 있습니다. 인내와 도움에 감사드립니다. –