【问题标题】:how to change content of dynamically generated button with MenuFlyout in windows phone 8.1 application如何在 windows phone 8.1 应用程序中使用 MenuFlyout 更改动态生成按钮的内容
【发布时间】:2016-05-01 19:49:10
【问题描述】:

我正在生成一个动态包含 MenuFlyout 的按钮。

       public Button createButton(string name, String[] value)
    {
        Button bt = new Button();
        bt.Name = name;
        MenuFlyout m = createMenu(value);
       bt.Click +=  (sender, e) => { Bt_Click(sender, e, m, name); };

        return bt;
    }
private void Bt_Click(object sender, RoutedEventArgs e, MenuFlyout m, string name)
    {

        m.ShowAt((FrameworkElement)sender);
        buttonclicked = name;
    }

    public MenuFlyout createMenu(string[] value)
    {
        MenuFlyout m = new MenuFlyout();
        for (int i = 0; i < value.Length; i++)
        {
            MenuFlyoutItem mn = new MenuFlyoutItem();
            mn.Text = value[i];
            mn.Click += Mn_Click;
            m.Items.Add(mn);
        }
        return m;
    }

    private void Mn_Click(object sender, RoutedEventArgs e)
    {

    }

现在我希望当单击任何菜单浮出项目时,该按钮应更改其内容。

【问题讨论】:

标签: c# windows windows-phone-8.1


【解决方案1】:

我看到您正在跟踪已单击按钮的名称。有了它,您可以在 xaml 树中搜索它并以这种方式更改内容。

使用VisualTreeHelper 查找视觉元素 所有细节都可以在这里找到https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.visualtreehelper

它的底部有一个很好的代码 sn-p,您可以通过该代码在页面上找到所有“按钮”,然后从该列表中获取具有正确名称的按钮并更改其内容。 类似这样的东西UWP: changing the (text) style of a ListBoxItem Element in c# code

internal static void FindChildren<T>(List<T> results, DependencyObject startNode)
  where T : DependencyObject
{
    int count = VisualTreeHelper.GetChildrenCount(startNode);
    for (int i = 0; i < count; i++)
    {
        DependencyObject current = VisualTreeHelper.GetChild(startNode, i);
        if ((current.GetType()).Equals(typeof(T)) || (current.GetType().GetTypeInfo().IsSubclassOf(typeof(T))))
        {
            T asType = (T)current;
            results.Add(asType);
        }
        FindChildren<T>(results, current);
    }
}

【讨论】:

  • 非常感谢您的帮助,“startNode”应该是什么
  • 这是页面上的另一个 UI 元素...或页面本身。看看另一个 SO 问题的链接,它有一个用法示例 - 它在那里使用一个列表框。但在你的情况下,使用按钮所在的网格(如果有主网格)
  • 好的,谢谢,但它不会更新按钮的内容。虽然调试每件事似乎都是正确的
  • 嗯并在代码中手动更改内容只是为了测试它是否有效?因此,如果您进行调试,您会得到具有“旧”内容值的正确按钮吗?
  • 我已经尝试过硬编码,但它也没有解决这个问题? @Depechie
猜你喜欢
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多