- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的应用程序创建了一个包含 20 个按钮的列表,这些按钮位于 mainpage.xaml 上:
private List<Button> CreateList()
{
for (int i = 0; i <= 19; i++)
{
string name = string.Format("button{0}", i+1);
Button buttt = new Button();
buttt.Name = name;
buttt.Content = i + 1;
buttt.Height = 72;
buttt.HorizontalAlignment = HorizontalAlignment.Left;
buttt.VerticalAlignment = VerticalAlignment.Top;
buttt.Width = 88;
buttt.Click += new RoutedEventHandler(this.button_Click);
GameGrid.Children.Add(buttt);
myList.Insert(i, buttt);
}
现在,如果我尝试打乱这个列表,它似乎会失去与页面上实际按钮的连接。
private void Shuffle(List<Button> list)
{
//list[1].Content = "DING!";
Random rand = new Random();
int n = list.Count;
while (n > 1)
{
n--;
int k = rand.Next(n + 1);
Button value = list[k];
list[k] = list[n];
list[n] = value;
}
}
请注意,如果我取消注释 //list[1].Content = "DING!";
并注释掉此方法的其余部分,按钮的内容会在屏幕上更改。所以我假设链接在随机播放期间断开了。
所以我的问题是,当我运行这段代码时,按钮会显示,但仍然按 1 到 20 的顺序排列,而不是像我预期的那样随机打乱。
感谢您的帮助!
编辑:这是包含 Chris 建议的完整代码:
private List<Button> CreateList(List<Marginz> myMargin)
{
for (int i = 0; i <= 19; i++)
{
string name = string.Format("button{0}", i+1);
Button buttt = new Button();
buttt.Name = name;
buttt.Content = i + 1;
buttt.Height = 72;
buttt.HorizontalAlignment = HorizontalAlignment.Left;
buttt.VerticalAlignment = VerticalAlignment.Top;
buttt.Width = 88;
buttt.Click += new RoutedEventHandler(this.button_Click);
Thickness myThickness = new Thickness();
myThickness.Left = myMargin[i].left;
myThickness.Top = myMargin[i].top;
myThickness.Right = myMargin[i].right;
myThickness.Bottom = myMargin[1].bottom;
buttt.Margin = myThickness;
//GameGrid.Children.Add(buttt);
myList.Insert(i, buttt);
}
return myList;
}
这里是它的名字:
private void EasyButton_Click(object sender, RoutedEventArgs e)
{
DifficultyCanvas.Visibility = System.Windows.Visibility.Collapsed;
ReadyCanvas.Visibility = System.Windows.Visibility.Visible;
//set difficulty attributes
difficulty = "Easy";
var myMarg = CreateMarginList(marg);
var buttons = CreateList(myMarg);
Shuffle(buttons);
foreach (var button in buttons)
{
GameGrid.Children.Add(button);
}
}
编辑更多解释:关于边距。我创建了一个名为 Marginz 的类:
public class Marginz
{
public Marginz()
{
//Constructor
}
public int left { get; set; }
public int top { get; set; }
public int right { get; set; }
public int bottom { get; set; }
}
“marg”是这种类型的列表:
List<Marginz> marg = new List<Marginz>(20);
然后 CreateMarginList() 这样做:
public List<Marginz> CreateMarginList(List<Marginz> myMarg)
{
Marginz one = new Marginz();
one.left = 28;
one.top = 186;
one.right = 0;
one.bottom = 0;
myMarg.Insert(0, one);
Marginz two = new Marginz();
two.left = 133;
two.top = 186;
two.right = 0;
two.bottom = 0;
myMarg.Insert(1, two);
等一直到二十。然后 返回 myMarg;
所以每个 Button 都有一个独特的边距,将它放在 Grid 中。
最佳答案
打乱 myList 集合不会改变它们在页面上的显示顺序。这取决于您在 CreateList 方法中将它们添加到 GameGrid 的顺序。您可以做的是全部创建它们,打乱列表,然后将它们添加到 Children 列表中。
因此删除 CreateList
中的 GameGrid.Children.Add
调用(注意,我稍微调整了那里的代码,我假设您没有发布完整代码)
private List<Button> CreateList()
{
var myList = new List<Button>();
for (int i = 0; i <= 19; i++)
{
string name = string.Format("button{0}", i+1);
Button buttt = new Button();
buttt.Name = name;
buttt.Content = i + 1;
buttt.Height = 72;
buttt.HorizontalAlignment = HorizontalAlignment.Left;
buttt.VerticalAlignment = VerticalAlignment.Top;
buttt.Width = 88;
buttt.Click += new RoutedEventHandler(this.button_Click);
myList.Add(buttt);
}
return myList;
}
执行随机播放,然后添加它们:
var buttons = CreateList();
Shuffle(buttons);
foreach(var button in buttons)
{
GameGrid.Children.Add(button);
}
编辑:从您发布的完整代码来看,问题是因为所有按钮都在 Grid
控件中,它们的位置取决于它们在 和 它们的 Margin
(控制它们在该单元格中的位置)。如果您没有明确定义它们的行/列,那么它们将被假定在第一行/列中。在这种情况下,它们的边距(未被打乱)决定了它们的位置。
我认为在这种情况下,要么用单元格构建网格,要么可能最简单:在创建列表之前简单地打乱 myMargin
列表!按钮将按顺序添加,但它们的位置是随机的。
var myMargin = CreateMargins(); //wherever that's done
Shuffle(myMargin); //you'll have to change the signature to work against List<Thickness> instead
var buttons = CreateList(myMargin); //add back the GameGrid.Children.Add call
//notice, no longer a call to shuffle the buttons
可能不是最佳解决方案,但我认为这会给您带来与您想要的相同的效果。
关于c# - 洗牌列表 <Button> 失去与 mainpage.xaml 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307765/
我创建了一个项目,其中 MainPage.xaml.cs 如下所示: using System; using System.Collections.Generic; using System.Net;
我的 WP8.1 RT 应用程序遇到了一个奇怪的问题 - 我的一位 Beta 测试员报告说他在启动画面后看到黑屏。该应用程序不会崩溃、挂断电话或其他 - 只是黑屏而不是 MainPage。我在代码中实
我在 Silverlight 中有一个子窗口,我希望发送一个字符串值来填充应用程序 MainPage.xaml 中的文本框。 如何传回值? 我试过了- MainPage m = (MainPage)A
public partial class MainPage : ContentPage { public MainPage() { InitializeComp
当导航到另一个页面时,如何使我的对象列表对另一个页面可用。 例如在我的 mainpage.xaml 中 var data2 = from query in document.Descendants("
我想在@mainpage 部分中包含多个 .txt 文件(或 .md 文件,用 Markdown 编写)。 但是,我为这些文本文件中的每一个获得了一个单独的章节。这如何防止? 最佳答案 我在这里寻找相
我有来自 Prism 模板的基本 Prism/Unity/Xamarin Forms 应用程序。 如果我更改以下(添加参数)它会失败 public MainPage(INavigationServic
我是 C++ 和 Windows 应用商店编程的新手,我一直在定义按钮上的点击处理程序。我指的是 these说明: Add a Button control to a parent container
我想获取 Iframe 上的输入值。我想在单击主页上的按钮时获取此值。 好吧,我有这段代码 主页上的 JavaScript: var targetDiv = document.getElement
我应该如何正确使用根页面,以便我可以使用正确的导航栏导航/推送到其他页面。 现在看起来像这样: MainPage = new RootPage (); 还有我的根页面: public RootPage
如果您将 MainPage.dox 文件放在 Doxygen 的搜索路径中,它会将其添加到源文档上方 Doxygen/html 中的输出中。但是你可以有多个文件,比如 MainPage.dox 吗?或
我在显示 bootstrap .dropwdown 类时遇到问题。它从一开始就有效,但一段时间后就停止显示了。我在整个网站中使用固定容器作为“主页”。现在看起来像这样:/image/EMFgQ.jpg
我想知道应用程序内主页按钮的实现,该按钮可将您从任何页面返回到主页面。据我所知,WP7 开发指南不允许这样做。但我找不到任何关于那个的书面信息。 有谁知道这是在哪里写的吗? 最佳答案 通常不鼓励使用主
我们为我们的 Doxygen 构建定义了自己的\mainpage 部分,我希望有一个链接作为其中的一部分到自动生成的类索引页面 (classes.html) 和命名空间列表顶级页面 (namespac
我试图理解 example app由微软。现在我不能重复下一部分了。该应用程序有类 App和 ExtendedSplach .我想通过 ExtendedSplash 重复加载。就我而言,在延迟一段时间
在两种情况下,我无法确定 doxygen 关于 \mainpage 部分的行为: 如果您未指定 \mainpage 部分,它会使用任何其他页面吗?如果是,如何选择? 如果两个文件都指定了 \mainp
我在 Silverlight 中有一个从 MainPage.xaml 导航的页面,称为 OpenPage.xaml,然后我想将一个值传递回 MainPage.xaml - 使用此调用此 OpenPag
首先,我知道文档指出我应该在 App 类构造函数 ( https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/
我有将应用程序从 iOS 迁移到 Forms 的异常情况。 我的设置是 - iOS 项目加载签名 UIViewController 和处理登录例程。 MainPage 为空。 登录例程完成后,我将 X
这是我第一次接触 Xamarin Forms,所以我可能(而且很可能)以错误的方式做事。 我有以下 Xaml:
我是一名优秀的程序员,十分优秀!