在按钮点击上切换条目的可见性 - Xamarin Forms

时间:2018-04-08 23:59:12

标签: xamarin mvvm xamarin.forms

我需要一些帮助来排序按钮点击的条目可见性。我尝试了一些不同的东西。以下代码是迄今为止我得到的最好结果。但它也不完美。

要求:当页面显示在屏幕上时,它只有一个按钮可见,当用户点击按钮时,它会显示该条目,如果再次单击该按钮,则该条目应设置为不可见。如果我点击页面中的其他位置,它也应该隐藏条目。

XAML。

 <controls:CustomButton 
           Text="Submit" 
           TextColor="White"  
           HorizontalOptions="FillAndExpand" 
           Command="{Binding TextSubmitCommand}"
           Icon="WhiteKeyboard"/>

           <controls:CustomEntry 
                    x:Name="ItemEntry"
                    TextColor="White"                                    
                    HeightRequest="50"
                    HorizontalTextAlignment="Center"
                    VerticalOptions="Center"
                    IsVisible="{Binding EntryVisible, Mode=TwoWay}">
                    <controls:CustomEntry.Behaviors>
                        <behaviors:EventToCommand 
                            Command="{Binding LocationSearchCommand}"
                            EventName="Completed"/>
                    </controls:CustomEntry.Behaviors>
                   <controls:CustomEntry.Triggers>
                        <DataTrigger TargetType="controls:CustomEntry"
                                     Binding="{Binding EntryVisible}"
                                     Value="true">
                           <Trigger.EnterActions>
                                <triggers:EntryFocusTrigger/>
                            </Trigger.EnterActions>
                        </DataTrigger>
                    </controls:CustomEntry.Triggers>
                </controls:CustomEntry>

查看模型

    public bool EntryVisible { get; set; } = false;

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

触发

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

使用上面的代码,它可以很好地切换按钮点击的可见性。但是,如果我点击页面中的其他位置,键盘会隐藏,但输入仍然存在。所以我尝试添加一个事件触发器。

将以下xaml添加到(XAML页面)

中的自定义条目
<EventTrigger Event="Unfocused">
    <triggers:EntryUnfocusTrigger />
</EventTrigger>

并且实际触发器定义为:

public class EntryUnfocusTrigger : TriggerAction<CustomEntry>
{
    public bool IsVisible { get; set; }

    protected override void Invoke(CustomEntry entry)
    {
        if(entry.IsFocused == false){
            entry.IsVisible = false;
        }
    }
}

但是在添加上面的代码之后,在第一次切换之后,该条目根本不显示。什么是干净的方式让这个工作。期待您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试添加此Trigger以在条目未聚焦时隐藏:

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

使用此功能,您不需要自定义触发器类。

希望这会有所帮助.-