【问题标题】:Toggle the visibility of a Text Field on a click of a button - Xamarin Forms单击按钮切换文本字段的可见性 - Xamarin Forms
【发布时间】:2019-02-01 12:11:04
【问题描述】:

我的 Xamarin Forms 应用程序中有一个文本字段和一个按钮。如果按钮的当前可见性为真,并且如果用户点击了按钮,则可见性需要更改为假,反之亦然。

为了进一步增加复杂性,如果用户点击页面的任何其他部分,文本字段的可见性也会更改为 false。

这是文本字段的 XAML 部分

<controls:CustomEntry 
         x:Name="FirstNameEntry"
         Text= "{Binding FirstName}"
         IsVisible="{Binding EntryVisible}">
         <controls:CustomEntry.Triggers>
              <DataTrigger TargetType="controls:CustomEntry"
                  Binding="{Binding EntryVisible}" Value="true">
                  <Trigger.EnterActions>
                        <triggers:EntryFocusTrigger/>
                  </Trigger.EnterActions>
              </DataTrigger>
              <Trigger TargetType="controls:CustomEntry"
                   Property="IsFocused" Value="false">
                   <Setter Property="IsVisible" Value="false" />
               </Trigger>
           </controls:CustomEntry.Triggers>
  </controls:CustomEntry>

注意:我在 XAML 中的数据触发器是在用户单击按钮时将焦点移到条目上,以便键盘也可见。

这是我的按钮代码

 <Button 
      Text="Key in Name" 
      Command="{Binding ToggleEntryCommand}"
      HeightRequest="50"/>

ViewModel 中的命令

 public Command ToggleEntryCommand
    {
        get
        {
            return new Command(() =>
            {
                EntryVisible = !EntryVisible;
            });
        }
    }

触发代码

public class EntryFocusTrigger : TriggerAction<CustomEntry>
{
    protected override void Invoke(CustomEntry entry)
    {
        entry.Focus();
    }

}

当前问题

如果用户切换按钮,文本字段的可见性将按预期工作。

但如果用户单击页面上的其他位置,文本字段会消失,但用户现在需要在按钮上单击两次才能重新打开可见性。

感谢您帮助解决此问题。我也尝试过为 EntryVisible 属性设置绑定模式 = 两种方式。但确实不能解决问题。

我还想知道是否有更优雅的方式来编写相同的内容,而无需使用代码隐藏文件。

【问题讨论】:

  • 你能在这里分享EntryFocusTrigger吗?
  • @Motumbo:我现在有。请检查修改后的代码
  • Binding="{Binding EntryVisible}" Value="true"&gt; 尝试将 Value 设置为 false 看看会发生什么
  • 和代码后面(丑陋的解决方案)protected override void OnAppearing() { base.OnAppearing(); myViewModel.IsEntryVisible = FirstNameEntry.IsVisible; }

标签: xamarin xamarin.forms


【解决方案1】:

可能是,将属性 EntryVisible 绑定到下面

 <Trigger TargetType="controls:CustomEntry"
               Property="IsFocused" Value="false">
               <Setter Property="IsVisible" Value="false" />
           </Trigger>

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2014-07-04
    • 2023-03-24
    • 2013-05-13
    • 2021-08-12
    • 2011-12-15
    • 2012-04-28
    • 2015-04-14
    相关资源
    最近更新 更多