Xamarin 表单清除所有条目

Posted

技术标签:

【中文标题】Xamarin 表单清除所有条目【英文标题】:Xamarin Forms Clear All Entries 【发布时间】:2021-07-24 06:12:39 【问题描述】:

有没有办法清除 Xamarin.Forms 应用程序中的所有条目?我检查了这个链接here,但没有帮助。

【问题讨论】:

是的。遍历所有这些并清除它们的值,或清除它们绑定的模型属性。但是没有内置函数可以神奇地为你做到这一点。 对于提供的链接,他只是创建了另一个视图模型实例,因此页面上绑定的每个文本值都会被清除为默认值。您所说的“没有帮助”是什么意思,任何要发布的代码。 @Shaw 我认为他正在使用 MVVM 对吗?我不使用它。如果我错了,请纠正我。 @Jason 你能添加一些代码 sn-p 吗?我正在寻找一种方法来获取所有条目并遍历它们,或者给它们一个像 html 这样的类并清除它们。 【参考方案1】:

我使用了@Bassies 代码,经过修改以从布局中动态清除条目。因此,您不需要在后面的代码中添加引用。此方法将遍历每个项目和明文。因此,在比较@Bassies 方式时,这种动态方法将花费更多时间来处理。但这将是可以忽略不计的时间,因为单个页面视图不会包含大量视图(例如 10000 或更多)

 public partial class MainPage : ContentPage
    
        public MainPage()
        
            InitializeComponent();
        

        private void Button_Clicked(object sender, EventArgs e)
        
            var child = this.Content as Layout;
            if (child != null)
            
                ProcessLayoutChildren(child);
            
        

        public void ProcessLayoutChildren(Layout child)
        
            foreach (var item in child.Children)
            
                var layout = item as Layout;
                if (layout != null)
                
                    ProcessLayoutChildren(layout);
                
                else
                
                    ClearEntry(item);
                
            

            void ClearEntry(Element entryElement)
            
                var entry = entryElement as Entry;
                if (entry != null)
                
                    entry.Text = string.Empty;
                
            
        
    

【讨论】:

听起来像@Houssem 的回答。我赞成它,但由于他首先回答,因此没有将其标记为已接受。谢谢你【参考方案2】:

我还没有测试过,但它应该可以工作

您可以遍历布局中的所有子视图并清除其中的条目。

如果您使用的是 XAML,请为您的布局命名,以便您可以在后端代码中访问它

<StackLayout x:Name="MyForm">
    <Label Text="Anything"/>
    <Entry />
    <Entry />
    <Entry />
    <Button Text="Clear" x:Name="Clear" Clicked="Clear_Clicked" />

</StackLayout>

然后在你的后端:

private void Clear_Clicked(object sender, EventArgs e)

    foreach (View view in MyForm.Children)
    

        if(view is Entry)
        
            (view as Entry).Text = String.Empty;
        
    


【讨论】:

【参考方案3】:

也许不是正确的方式,但它是如何在 1 页上工作的示例。

您可能想更改它,但请告诉我们它是如何工作的

<StackLayout>
    <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
        <Label Text="Clear All" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
    </Frame>

    <Entry x:Name="Nr1" />
    <Entry x:Name="Nr2" />
    <Entry x:Name="Nr3" />
    <Button Text="Clear" Clicked="Button_Clicked" />

</StackLayout>

并且 制作一个列表并为条目命名,我使用 Nr1、Nr2 和 Nr3,但仅作为示例。

public partial class MainPage : ContentPage

    List<Entry> entry = new List<Entry>();
    public MainPage()
    
        InitializeComponent();
        entry.Clear();
        entry.Add(Nr1);
        entry.Add(Nr2);
        entry.Add(Nr3);

    

    private void Button_Clicked(object sender, EventArgs e)
    
        foreach (var entry in entry)
        

            entry.Text = "";
        

    

【讨论】:

做了一个小例子,你可以在这里找到。 github.com/borisoprit/Clearentry 我认为这可行但不接受它,因为不是将它们放在列表中并循环它们然后我可以立即清除它们。但感谢你的帮助 @Sam 没问题,我在我的应用程序中使用了它,因为我不想清除 20 个条目中的 3 个。这就是我使用列表的原因。

以上是关于Xamarin 表单清除所有条目的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单:如何复制条目值?

禁用 Xamarin 表单输入字段上的复制/粘贴,即条目

如何在 UWP 上的 Xamarin 表单条目中垂直居中文本?

如何在 UWP 上的 Xamarin 表单条目中垂直居中文本?

如何将背景图像分配给 ios 的 xamarin 表单中的条目

是否可以停止第一个条目在 Xamarin 表单中的 ScrollView 中获得焦点