如何获取UniformGrid内动态创建的最后一个TextBox的值?
获取UniformGrid中最后一个TextBox的值的解决方案
嘿,我来帮你搞定这个问题!要拿到动态创建在UniformGrid里的最后一个TextBox的值,其实有几个简单直接的办法,我给你一一说明:
方法1:直接访问Children集合的最后一项
因为uniformGrid.Children是一个UIElementCollection,我们可以通过索引直接定位到最后一个元素,只需要注意把它转换成TextBox类型就行:
// 获取最后一个元素并转换为TextBox var lastTextBox = uniformGrid.Children[uniformGrid.Children.Count - 1] as TextBox; if (lastTextBox != null) { string lastDateValue = lastTextBox.Text; // 在这里使用获取到的日期值即可 }
注意:这个方法适用于你确定UniformGrid的Children里全是TextBox的情况,如果有其他类型控件,转换可能会失败,所以一定要加null判断。
方法2:创建时直接保留最后一个TextBox的引用
如果在初始化的时候就知道后续要用到最后一个TextBox,那直接在循环里记录它的引用会更高效,不用事后再从集合里查找:
// 声明一个类级别的变量来保存最后一个TextBox的引用 private TextBox _lastDateTextBox; public Window1() { InitializeComponent(); for (var i = 0; i < 30; i++) { var textBox = new TextBox { Width = 70, Background = Brushes.Beige, HorizontalContentAlignment = HorizontalAlignment.Center, VerticalContentAlignment = VerticalAlignment.Center, Height = 30, Margin = new Thickness(3) }; uniformGrid.Children.Add(textBox); // 每次循环更新引用,最后就会保留最后一个TextBox的实例 _lastDateTextBox = textBox; } } // 后续需要取值时直接使用 if (_lastDateTextBox != null) { string lastDateValue = _lastDateTextBox.Text; }
方法3:用LINQ筛选出最后一个TextBox
如果你的UniformGrid里可能混有其他类型的控件,用LINQ来筛选所有TextBox再取最后一个会更安全,不过记得先引用System.Linq命名空间:
using System.Linq; // ... // 筛选出所有TextBox并取最后一个(如果有的话) var lastTextBox = uniformGrid.Children.OfType<TextBox>().LastOrDefault(); if (lastTextBox != null) { string lastDateValue = lastTextBox.Text; }
这几种方法各有适用场景,你可以根据自己的实际情况选择~
内容的提问来源于stack exchange,提问作者mhshojaee
相关产品推荐
相关产品推荐

