使用样式属性设置输入行为

MatúšBako

我已经这样定义了我的风格:

<ContentView.Resources>
    <ResourceDictionary>
        <Style TargetType="Entry" x:Key="IntegralEntryBehavior">
            <Setter Property="Behaviors" Value="valid:EntryIntegerValidationBehavior"/>
        </Style>
    </ResourceDictionary>
</ContentView.Resources>

以及多个类似的条目:

<StackLayout Grid.Column="0" Grid.Row="0">
    <Entry Style="{StaticResource IntegralEntryBehavior}"/>
</StackLayout>

如果我这样定义Entry行为,则会得到一个错误那that Entry.Behaviors property is readonly,但可以定义行为而无需Style在Entry内部使用如下属性:

<Entry.Behaviors>
    <valid:EntryIntegerValidationBehavior/>
</Entry.Behaviors>

这些方法之间有什么区别?为什么只有第二种方法有效?是否可以修改第一种方法以使其起作用?我正在寻找一种比第二种方法更短的方法来定义每个条目的这种行为。

hvaughan3

您可以在此处签出示例:

https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/behaviors/creating#using-a-xamarinforms-behavior-with-a-style

基本上,将附加属性添加到您的行为,然后将样式设置器的属性设置为该附加属性。Attached属性处理将自身添加到Entry您将其附加到的属性

public class EntryIntegerValidationBehavior : Behavior<Entry>
{
  public static readonly BindableProperty AttachBehaviorProperty =
    BindableProperty.CreateAttached ("AttachBehavior", typeof(bool), typeof(EntryIntegerValidationBehavior), false, propertyChanged: OnAttachBehaviorChanged);

  public static bool GetAttachBehavior (BindableObject view)
  {
    return (bool)view.GetValue (AttachBehaviorProperty);
  }

  public static void SetAttachBehavior (BindableObject view, bool value)
  {
    view.SetValue (AttachBehaviorProperty, value);
  }

  static void OnAttachBehaviorChanged (BindableObject view, object oldValue, object newValue)
{
    var entry = view as Entry;
    if (entry == null) {
        return;
    }

    bool attachBehavior = (bool)newValue;
    if (attachBehavior) {
        entry.Behaviors.Add (new EntryIntegerValidationBehavior ());
    } else {
        var toRemove = entry.Behaviors.FirstOrDefault (b => b is EntryIntegerValidationBehavior);
        if (toRemove != null) {
            entry.Behaviors.Remove (toRemove);
        }
    }
  }

  // Actual behavior code here

}

最后,编辑样式,如下所示:

    <Style TargetType="Entry" x:Key="IntegralEntryBehavior">
        <Setter Property="valid:EntryIntegerValidationBehavior.AttachBehavior" Value="true"/>
    </Style>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅使用CSS设置禁用输入的样式

来自分类Dev

使用thymeleaf设置CSS样式属性

来自分类Dev

无法使用JavaScript设置样式属性

来自分类Dev

使用React设置对象属性的样式

来自分类Dev

使用模板设置 CSS 样式属性

来自分类Dev

奇怪的输入行为,带有stderr重定向

来自分类Dev

如何修复Mac Excel奇怪的键盘输入行为

来自分类Dev

“ cat”和“ less”之间的Stdin输入行为

来自分类Dev

使用可选输入设置ActiveX属性

来自分类Dev

Python导入行为和“ NoneType”对象没有属性

来自分类Dev

使用getElementById设置动态ID的输入字段的样式

来自分类Dev

如何仅使用JavaScript设置输入范围的拇指样式?

来自分类Dev

如何使用CSS设置输入类型文件的样式

来自分类Dev

使用 attr() 设置元素属性并使用 data() 行为获取

来自分类Dev

使用 memchr 计算输入行数失败

来自分类Dev

如何使用数据触发器设置WPF行为属性

来自分类Dev

使用MVC使用bootstrap glyphicon样式设置样式,使提交输入看起来像跨度

来自分类Dev

使用数据变量动态设置属性样式填充

来自分类Dev

使用样式属性的对象设置element.style

来自分类Dev

如何使用 ID 属性为 css 中的元素设置样式?

来自分类Dev

设置禁用范围输入的样式

来自分类Dev

如何使用内联背景颜色样式设置表单输入字段的样式

来自分类Dev

通过使用标签包装输入,使用CSS3设置输入元素的样式

来自分类Dev

使用printf进行怪异的浮点舍入行为

来自分类Dev

使用printf进行怪异的浮点舍入行为

来自分类Dev

奇怪的导入行为

来自分类Dev

C ++舍入行为

来自分类Dev

C ++舍入行为

来自分类Dev

链表插入行为

Related 相关文章

热门标签

归档