Silverlight 4.0 在silverlight中组合非常相似的控件

Silverlight 4.0 在silverlight中组合非常相似的控件,silverlight-4.0,Silverlight 4.0,我有两个控件。XAML很大而且非常相似。一个区别是:它们包含一个列表框,在一个控件中,它绑定到{StaticResource X},并且是multiselect,另一个绑定到{StaticResource Y},并且不是multiselect。后面的代码也非常相似。我应该如何将这两个类合并为一个类?我曾想过创建一个基类并从中派生出我的2个控件,但我不知道如何使用XAML来实现这一点。我知道,如果我在代码中设置不同的属性,而不是XAML(这样的情况下XAML将变得相同),那么我们可以使它变得更容易

我有两个控件。XAML很大而且非常相似。一个区别是:它们包含一个列表框,在一个控件中,它绑定到{StaticResource X},并且是multiselect,另一个绑定到{StaticResource Y},并且不是multiselect。后面的代码也非常相似。我应该如何将这两个类合并为一个类?我曾想过创建一个基类并从中派生出我的2个控件,但我不知道如何使用XAML来实现这一点。我知道,如果我在代码中设置不同的属性,而不是XAML(这样的情况下XAML将变得相同),那么我们可以使它变得更容易,但是让我们考虑一下这个计划。Silverlight没有样式选择器,但是它看起来是一个可能的解决方案。也许VisualStateManager可以做到这一点,但听起来很糟糕,因为我的问题与视觉无关,但也许我可以定义两种状态。不过我认为SL不支持样式定义中的绑定。对于像我这样的初学者来说,这是一个棘手的问题…

您应该研究如何创建自定义控件和使用AlternateContent属性。看看这些,你会发现数百个教程


这里有一个快速入门的替代内容。

因此,总而言之,我想要一个可以在不同模式或状态下工作的控件。模式也会影响XAML属性和代码逻辑

VisualStateManager可以操作的属性似乎非常有限。但是,当差异只是视觉上的,它是最好的选择

当XAML中存在其他差异时,显而易见的选择是从XAML中省略这些属性,并在代码中设置它们,就像在ctor中一样。更好的方法是在代码中将这些属性作为依赖属性公开,绑定到用户控件的XAML中的这些属性,然后可以在使用此用户控件的其他XAML中指定这些属性。如果控件不关心这些属性中的内容,那么它也是一个很好的设计选择。在我的例子中,当设置这些不同的属性时,应该是用户控件本身的责任,而不是它的父控件的责任,并且我只想公开一个单一模式属性,这是不好的

对于这种情况,我发现目前为止最好的方法是:

  • 创建一个普通的用户控件(XAML+代码),公开不同的属性(简单,而不是DP),并在XAML中绑定到它们
  • 将此用户控件抽象化,可能还有一些属性
  • 对于控件需要支持的每个不同模式,从该基控件派生一个类(仅代码,无XAML),提供抽象属性的实现
  • 不要在其他地方使用基控件,而是使用一个派生实现
通过这种方式,您可以轻松地从外部指定希望控件在哪种模式下工作。缺点是不容易更改模式,因为需要更改的不是属性,而是控件的类型和实例


最后,当代码逻辑也存在差异时,一种方法是公开模式属性,或者使用我上面描述的抽象类方法。例如,按钮单击处理程序函数也可以是抽象的。

我不明白。我找不到任何具有该名称的属性。它不是属性,而是属性。我添加了一个链接以帮助您进行搜索。但是,学习其他内容并不重要,首先要了解如何创建自定义控件。