如何解决在WPF中使用搜索栏文本框时,如何使StackPanel重新排序?
上下文: 我有一个内部带有按钮的StackPanel。这些按钮以编程方式创建,命名和放入stackPanel中。然后,我有一个TextBox用作搜索栏,其中的一个按钮用作搜索按钮。
我想做什么: 我想要的是,当TextBox充满特定按钮的标签的文本并单击Search Button时,StackPanel会删除似乎与TextBox内容不匹配的按钮,然后当我擦除TextBox的内容时重新出现(我不在乎它的顺序是否与以前相同。
问题: 我有两个主要问题,都与同一个问题有关:单击“搜索”按钮时,它没有成功。通过FindName方法调用Button似乎不起作用(它为我提供了null。因此,我的问题是:是否可以像以前一样对StackPanel进行重新排序?在这种情况下,我该如何调用Button以编程方式创建?
代码:
private void buscarEntrada_Click(object sender,RoutedEventArgs e)
{
//Search button's click event
//All the buttons are named "Btn" + a constantly increasing number (0,1,2,3...)
//stackBotones is my StackPanel,I remove the buttons and then readd them depending on the textbox's content
try
{
for (int i = 0; i < stackBotones.Children.Count; i++)
{
stackBotones.Children.Remove((UIElement)stackBotones.FindName());
}
}
catch (Exception error)
{
MessageBox.Show(error);
}
}
提前感谢您阅读。
解决方法
您可以在Children
集合中按其名称找到子元素,如下所示:
string name = txt.Text;
Button button = stackBotones.Children.OfType<Button>().FirstOrDefault(x => x.Name == name);
如果要删除除匹配元素以外的所有元素,可以循环执行此操作:
string name = "b";
for(int i = stackBotones.Children.Count - 1; i>=0; i--)
{
if (stackBotones.Children[i] is FrameworkElement fe && fe.Name != name)
stackBotones.Children.RemoveAt(i);
}
您可以将stackBotones.Children[i]
添加到列表中,然后根据您的逻辑将其用于重新填充stackBotones.Children
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。