Member 12785541 Ответов: 1

Добавить кнопку в treeview


Я ищу способ добавить кнопку к выбранному элементу в TreeView в WPF, но не нашел никаких полезных решений.

Я импортирую данные из XML-файла:

Что я уже пробовал:

XmlDocument doc = recources.Xml_load();

            foreach (XmlNode n in doc.SelectNodes("/LMSProjekt/Projekt"))
            {
                XmlNode n_name = n.SelectSingleNode("Name");
                TreeViewItem itm = new TreeViewItem();
                //itm.Items.Add(cb);
                itm.Header = n_name.InnerText;
                Treeview.Items.Add(itm);

                foreach (XmlNode n_desc in n.SelectNodes("Prozess"))
                {
                    n_name = n_desc.SelectSingleNode("ProzessName");
                    TreeViewItem sub_itm = new TreeViewItem();
       sub_itm.Header = n_name.InnerText; //i would like to add a button HERE 
                    itm.Items.Add(sub_itm);

                    foreach (XmlNode n_desc2 in n_desc.SelectNodes("description"))
                    {   
                        TreeViewItem sub2_itm = new TreeViewItem();
                        sub2_itm.Header = n_desc2.InnerText ;
                        sub_itm.Items.Add(sub2_itm);
                        selected = n_desc2.InnerText;
                    }  
                }
            }

NotPolitcallyCorrect

Вы добавили шаблон для вашего элемента treeview, чтобы включить кнопку?

Member 12785541

на самом деле нет , как я могу это сделать ? я новичок в Си#

NotPolitcallyCorrect

Вы задаете шаблон для каталога товаров. Затем вы назначаете свой шаблон для ваших элементов. http://www.codeproject.com/Articles/236621/WPF-Treeview-Styling-and-Template-Binding-using-MV может помочь

johannesnestler

было бы неплохо, если бы вы проголосовали за решение или сказали нам, что решили его...

1 Ответов

Рейтинг:
1

johannesnestler

Привет Член,

Взгляните на это, чтобы получить представление:

<Window

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:local="clr-namespace:WpfApplication2"

    xmlns:System="clr-namespace:System;assembly=mscorlib"

    x:Class="WpfApplication2.MainWindow"

    mc:Ignorable="d"

    Title="MainWindow"

    Height="350"

    Width="525">

    <Window.Resources>
        <!--Because we need to convert the visibility enum value to a boolean (the IsSelected property of the TreeViewItem) we need a converter - let's use the default one, we create a window-level resource out of it-->
        <BooleanToVisibilityConverter

            x:Key="BooleanToVisibilityConverter">
        </BooleanToVisibilityConverter>
    </Window.Resources>
    <Grid>

        <TreeView>
            <!--Define an ItemTemplate like you wish for you tree nodes (could use different ones, for different kind of nodes by setting a DataType for the DataTemplate)-->
            <TreeView.ItemTemplate>
                <DataTemplate>

                    <!--As example we use a combination of a TextBlock and a Button stacked horizontally (add margins and so on to get a nicer look)-->
                    <StackPanel

                        Orientation="Horizontal">
                        <TextBlock

                            Text="{Binding}" />
                        <!--here is the trick: Every added item (in this example just strings) will be wrapped in a TreeViewItem by the Treeview, so we bind the visibility of the button
                            to the IsSelected property of its "upper" TreeViewItem, then we use the converter we defined earlier to convert the boolean value to a meaningful Visibility enum value -->
                        <Button

                            Content="clickme"

                            Visibility="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}, Converter={StaticResource BooleanToVisibilityConverter}}">
                        </Button>
                    </StackPanel>
                </DataTemplate>
            </TreeView.ItemTemplate>

            <TreeViewItem></TreeViewItem>

            <!--Just some sample items (in real you will most likely use ItemsSource property to bind data-->
            <System:String>bla</System:String>
            <System:String>bla</System:String>
            <System:String>bla</System:String>
            <System:String>bla</System:String>
            <System:String>bla</System:String>


        </TreeView>

    </Grid>
</Window>