2017-02-07 1 views
-1

Theres уже размещает о получении элемента treeview, и они не применимы ко мне, мой XAML построен по-другому, мое древовидное изображение завернуто в кнопки, поэтому, когда я щелкните любой элемент дерева, я хочу «messagebox.show (выбранный путь к древовидной структуре) в порядке? это легко понять? другие методы, которые я гугле не работает для меня, потому что я уже попробовал их, я бы вновь работать мой код, чтобы заставить его работать, но я не хочу этого, вот XAML:Простой, быстрый способ получить элемент treeview, другие методы did not работают для меня

<TreeView x:Name="FolderView" ItemsSource="{Binding Items}" Background="#FF3D3C3C" Margin="0,0,285.667,-0.333"> 


     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"> 

       </Setter> 
      </Style> 
     </TreeView.ItemContainerStyle> 



     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type local:item}" ItemsSource="{Binding Children}"> 
       <Button Command="{Binding Source={x:Static local:MainWindow.ClickCommand}}" 
        CommandParameter="{Binding}"> 
       <StackPanel Orientation="Horizontal" Visibility="{Binding}"> 
        <Image Source="{Binding Type, 
            Converter={x:Static local:HeaderToImageConverter.Instance}}" Width="20" Margin="3"></Image> 
        <TextBlock VerticalAlignment="Center" Text="{Binding Name}"></TextBlock> 
       </StackPanel> 
       </Button> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 

    </TreeView> 

здесь кнопка нажмите:

public static RoutedUICommand ClickCommand = new RoutedUICommand("ClickCommand", "ClickCommend", typeof(MainWindow)); 

    public MainWindow() 
    { 
     this.InitializeComponent(); 
     this.DataContext = new DirectoryStructureViewModel(); 




     CommandBindings.Add(new CommandBinding(ClickCommand, OnClickCommand, OnCanClickCommand)); 

     var i11 = new item() { Name = "aaaa aaaa" }; 
     var i12 = new item() { Name = "bbbb bbbb" }; 
     var i21 = new item() { Name = "cccc cccc" }; 
     var i22 = new item() { Name = "dddd dddd" }; 
     var i0 = new item() { Name = "I1", Children = new List<item>() { i11, i12 } }; 
     var i1 = new item() { Name = "I1", Children = new List<item>() { i21, i22 } }; 
     this.FolderView.ItemsSource = new List<item>() { i0, i1 }; 

    } 
    private void OnCanClickCommand(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

    private void OnClickCommand(object sender, ExecutedRoutedEventArgs e) 
    { 
     MessageBox.Show(((item)e.Parameter).Name); 
    } 

ошибка: «не удается разрешить символ„элемент“

+0

Где проблема? – Ron

+0

@Ramin Я не знаю, я просто хочу окно с сообщением, которое я выбрал ... – Ozymandias

ответ

0

свойство SelectedItem должен возвращать связанный элемент, так что вы должны быть в состоянии сделать:

var object = this.FolderView.SelectedItem as YourType; 
if(object != null) 
{ 
    MessageBox.Show(object.Name); 
} 

Просто замените YourType тем, что вы связали в своем TreeView.
В качестве дополнительной заметки вы можете использовать свойство DataType="YourType" в XAML вашего шаблона, который будет бросать ошибки компилятора, если вы попытаетесь связать свойство не в YourType.

+0

не работает, приглашаем меня в чат, чтобы я мог показать вам больше кода – Ozymandias

0

Вы должны использовать Команды. Этот пример должен помочь вам:

C# код:

public MainWindow() 
    { 
     InitializeComponent(); 
     CommandBindings.Add(new CommandBinding(ClickCommand, OnClickCommand, OnCanClickCommand)); 

     var i11 = new Item() { Name = "aaaa aaaa" }; 
     var i12 = new Item() { Name = "bbbb bbbb" }; 
     var i21 = new Item() { Name = "cccc cccc" }; 
     var i22 = new Item() { Name = "dddd dddd" }; 
     var i0 = new Item() { Name = "I1", Children = new List<Item>() { i11, i12 } }; 
     var i1 = new Item() { Name = "I1", Children = new List<Item>() { i21, i22 } }; 
     tv.ItemsSource = new List<Item>() { i0, i1 }; 

    } 

    private void OnCanClickCommand(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

    private void OnClickCommand(object sender, ExecutedRoutedEventArgs e) 
    { 
     MessageBox.Show(((Item)e.Parameter).Name); 
    } 

    public static RoutedUICommand ClickCommand = new RoutedUICommand("ClickCommand", "ClickCommend", typeof(MainWindow)); 


public class Item 
{ 
    public string Name { get; set; } 
    public List<Item> Children { get; set; } 
} 

Xaml:

<TreeView Name="tv" > 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type local:Item}" ItemsSource="{Binding Children}"> 
       <Button Command="{Binding Source={x:Static local:MainWindow.ClickCommand}}" 
         CommandParameter="{Binding}"> 
        <StackPanel> 
         <TextBlock VerticalAlignment="Center" Text="{Binding Name}"></TextBlock> 
        </StackPanel> 
       </Button> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
+0

Я получаю сообщение об ошибке «Пункт» «подчеркнуто красным», невозможно разрешить символ «item». – Ozymandias

+0

Этот пример работает. «item» с «i», а не «I»? (Заглавная буква) – Ron

+0

Обратите внимание, что C# чувствителен к регистру. Это означает, что «item» отличается от «Item» – Ron

Смежные вопросы