Diskuze: Prevedenie itemov z TreeView na itemy ContextMenu

C# .NET .NET (C# a Visual Basic) Prevedenie itemov z TreeView na itemy ContextMenu American English version English version

Avatar
roks
Člen
Avatar
roks:

Zdravím, vedel by mi niekto poradiť, ako "prekonvertujem" TreeViewItem-y na MenuItem-y tak, že všetky itemy si zachovajú svojho rodiča (viď. obrázok) ?

 
Odpovědět 29.6.2014 22:04
Avatar
Odpovídá na roks
Michal Žůrek (misaz):

konvertor si asi budeš muset napsat sám... :(

Nahoru Odpovědět 29.6.2014 22:39
Nesnáším {}, proto se jim vyhýbám.
Avatar
roks
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
roks:

Toho som sa obával, lebo skúšal som to ale neviem ako spraviť, aby napr. 1.1 bolo rodičom pre 1.1.1 a pod :/ Ako iný problém nie je, len tento zádrhel...

 
Nahoru Odpovědět 29.6.2014 23:31
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:

Zkus si to vytvořit sám bez nějaké konverze a pak uvidíš, že to napíšeš za pár minut.

 
Nahoru Odpovědět  +2 30.6.2014 0:06
Avatar
Odpovídá na roks
Michal Štěpánek:

Když si to napíšeš bez konvertování "od začátku" jako menu, tak zjistíš, že to budeš mít rychleji, než rozběháš nějaký konvertor... :-)

Nahoru Odpovědět  +1 30.6.2014 8:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
roks
Člen
Avatar
roks:

Lenže ja potrebujem aby to automaticky vygenerovalo za chodu programu :)

 
Nahoru Odpovědět 30.6.2014 14:05
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:

Nedalo mi to.

public static class Extensions
{
    public static ContextMenu ConvertToContextMenu(this TreeView treeView)
    {
        var contextMenu = new ContextMenu();

        foreach (HeaderedItemsControl item in treeView.Items)
            contextMenu.Items.Add(GetCopy(item));

        return contextMenu;
    }

    private static MenuItem GetCopy(this HeaderedItemsControl control, bool fullTree = true)
    {
        MenuItem result = new MenuItem() { Header = control.Header };

        if (fullTree)
            foreach (HeaderedItemsControl item in control.Items)
                result.Items.Add(GetCopy(item));

        return result;
    }
}

testovací kód jsem měl podle tvého vzoru

var a1 = new TreeViewItem() { Header = "1" };
treeView.Items.Add(a1);
var a11 = new TreeViewItem() { Header = "1.1" };
a1.Items.Add(a11);
var a111 = new TreeViewItem() { Header = "1.1.1" };
a11.Items.Add(a111);

var a2 = new TreeViewItem() { Header = "2" };
treeView.Items.Add(a2);
var a21 = new TreeViewItem() { Header = "2.1" };
a2.Items.Add(a21);

btn.ContextMenu = treeView.ConvertToContextMenu();

btn je normalní Button na kterém jsem testoval to menu a treeView je normální TreeView podle tvého obrázku.

Editováno 30.6.2014 18:32
 
Nahoru Odpovědět 30.6.2014 18:30
Avatar
roks
Člen
Avatar
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.