Xamarin.Forms行为

时间:2016-09-16 22:01:11

标签: xamarin.forms

Xamarin.Forms似乎提供了另一种称为“行为”的方法来对控件进行子类化。为什么这首先需要?有什么好处,什么时候应该使用它而不是子类?

我上瘾的一个可能原因可能是子类控件无法使用其父控件的目标样式。但我也不明白这种限制的原因。

3 个答案:

答案 0 :(得分:0)

您可以查看Xamaron.Forms行为文档https://developer.xamarin.com/guides/xamarin-forms/behaviors/

答案 1 :(得分:0)

注意: 我不太确定,我明白你的意思。

  

我想的一个可能原因可能是子类控件不能使用其父控件的目标样式。但我也不明白这种限制的原因。

但是,我会尝试回答本段中提到的问题。

  

Xamarin.Forms似乎提供了另一种称为“行为”的方法来对控件进行子类化。为什么这首先需要?有什么好处,什么时候应该使用它而不是子类?

documentation中所述,行为允许您扩展控件的功能而无需派生它们。我想在以下情况下实现一个行为更有意义,而不是控制子类:

  • 如果可以跨多种控件类型共享功能

    最简单的示例是为支持输入的控件实施max-length / regex / min-length验证,例如EntryEditor等。

      <Entry>
        <Entry.Behaviors>
          <local:TextBehaviour MaxLength="25" MinLength="2" RegexPattern="[ae]" />
        </Entry.Behaviors>
      </Entry>
    
      <Editor>
        <Editor.Behaviors>
          <local:TextBehaviour MaxLength="250" MinLength="2" />
        </Editor.Behaviors>
      </Editor>
    
  • 如果需要为现有代码库中使用的控件扩展功能

    例如,我们可以使用隐式样式和附加属性扩展和附加行为到各种控件,而无需更新代码中的每个控件用法。

    <Style TargetType="Label">
      <Setter Property="local:ShadowEffect.HasShadow" Value="True" />
    </Style>
    <Style TargetType="Entry">
      <Setter Property="local:Validation.MaxLength" Value="35" />
    </Style>
    <Style TargetType="Editor">
      <Setter Property="local:Validation.MaxLength" Value="250" />
    </Style>
    

这是我现在能想到的情景。如果我再遇到的话,我会添加更多。

答案 2 :(得分:0)

这是来自WPF的概念,您可以在this great tutorial page上详细了解它。

  

行为背后的想法是让交互设计者更灵活地设计复杂的用户交互,而无需编写任何代码。

     

行为示例是拖放,输入验证,平移和缩放,   元素的重新定位等...可能的行为列表非常   长。

     

对具有客户列表和用户可以的应用程序进行映像   将其中一些添加到订阅者列表中。可以设计这种交互   通过提供&#34;添加&#34;每个订户列表旁边的按钮。但如果   交互设计师想要添加拖放功能,他需要   与开发人员讨论并等待实施   完成。通过行为,他只会在每个行为上拖放拖放行为   列表,我们完成了。

因此,在公司中,它允许设计人员和开发人员之间更好的工作流程。

除了已经提到的另外一个原因,可能是在运行时切换行为的可能性。