如何在 windows phone 8.1 应用程序中使用 MenuFlyout 更改动态生成的按钮的内容
how to change content of dynamically generated button with MenuFlyout in windows phone 8.1 application
我正在生成一个动态包含 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)
{
}
现在我希望当单击任何菜单弹出项时,按钮应更改其内容。
我看到您正在跟踪被点击的按钮的名称。有了它,您可以搜索 xaml 树并以此方式更改内容。
使用 VisualTreeHelper
查找视觉元素
可以在此处找到所有详细信息 https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.visualtreehelper
它在底部有一个很好的代码片段,您可以通过它找到页面上的所有 'Buttons',然后从该列表中选择具有正确名称的代码片段并更改其内容。
类似这样的东西
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);
}
}
我正在生成一个动态包含 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)
{
}
现在我希望当单击任何菜单弹出项时,按钮应更改其内容。
我看到您正在跟踪被点击的按钮的名称。有了它,您可以搜索 xaml 树并以此方式更改内容。
使用 VisualTreeHelper
查找视觉元素
可以在此处找到所有详细信息 https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.visualtreehelper
它在底部有一个很好的代码片段,您可以通过它找到页面上的所有 'Buttons',然后从该列表中选择具有正确名称的代码片段并更改其内容。
类似这样的东西
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);
}
}