PremKumar Shanmugam
PremKumar Shanmugam

Reputation: 441

How to get all MenuFlyoutItems when an MenuFlyoutItem is clicked in UWP?

what i have tried is?

MenuFlyout MenuFlyout=new MenuFlyout();
ToggleMenuFlyoutItem ToogleMenuflyoutItem1= new ToggleMenuFlyoutItem();
ToogleMenuflyoutItem1.Click+=Clicked;
ToggleMenuFlyoutItem ToogleMenuflyoutItem2= new ToggleMenuFlyoutItem();
ToogleMenuflyoutItem2.Click+=Clicked;
ToggleMenuFlyoutItem ToogleMenuflyoutItem3= new ToggleMenuFlyoutItem();
ToogleMenuflyoutItem3.Click+=Clicked;
ToggleMenuFlyoutItem ToogleMenuflyoutItem4= new ToggleMenuFlyoutItem();
ToogleMenuflyoutItem4.Click+=Clicked;
MenuFlyout.Items.Add(ToogleMenuflyoutItem1);
MenuFlyout.Items.Add(ToogleMenuflyoutItem2);
MenuFlyout.Items.Add(ToogleMenuflyoutItem3);
MenuFlyout.Items.Add(ToogleMenuflyoutItem4);
private void Cliked(object sender, RoutedEventArgs e)
{
 //I need All ToogleMenuFloutItem List//Here
}

I don't know how to achieve this?I want all the ToogleMenuFlyoutItem inside an clicked event of any ToogleMenuFlyoutItem.

Upvotes: 0

Views: 462

Answers (2)

Ryu
Ryu

Reputation: 271

This is definitely really ugly way. But if what you really want is 'Get every ToggleMenuFlyoutItems from only one of ToggleMenuFlyoutItem's Click event method'. Maybe this is one of the way for that.

private void Clicked(object sender, RoutedEventArgs e)
{
    var item = sender as ToggleMenuFlyoutItem;

    List<ToggleMenuFlyoutItem> itemList = new List<ToggleMenuFlyoutItem>();

    DependencyObject current = item;
    while (true)
    {
        current = VisualTreeHelper.GetParent(current);
        if(current is MenuFlyoutPresenter || current == null)
        {
            break;
        }
    }

    if(current != null)
    {
        var flyoutPresenter = (current as MenuFlyoutPresenter);
        var items = flyoutPresenter.Items;
        foreach (var x in items)
        {
            if(x is ToggleMenuFlyoutItem)
            {
                itemList.Add(x as ToggleMenuFlyoutItem);
            }
        }
    }

    foreach(var x in itemList)
    {
        ///something;
    }
}

Upvotes: 0

Vincent
Vincent

Reputation: 3304

If you want all ToogleMenuFlyoutItem, then you need to define out of the context.

MenuFlyout MenuFlyout=new MenuFlyout();

Then inside Clicked event, use

private void Clicked(object sender, RoutedEventArgs e)
{
    foreach(var item in menuFlyout.Items)
    {
        if (item != null)
        {
            var toogleMenuflyoutItem = item as ToggleMenuFlyoutItem;
        }
    }
}

Upvotes: 2

Related Questions