我有两个控件。 XAML非常大而且非常相似。一个区别是:它们包含一个列表框,在一个控件中,它绑定到{StaticResource X},并且是多选的,另一个绑定到{StaticResource Y},而不是多选。代码隐藏也非常相似。我应该如何将这两个类合并为一个?我想过创建一个基类并从中导出我的2个控件,但我不知道如何使用XAML。我知道如果我在代码中设置不同的属性而不是XAML(在这种情况下XAML将变得相同),我可以更容易,但让我们考虑一下计划B. Silverlight没有StyleSelector,但它似乎是一个可能的解决方案。也许VisualStateManager可以做到,除了它听起来很糟糕,因为我的问题与视觉效果无关,但也许我可以定义2个状态。除了我认为SL不支持样式定义中的绑定。像我这样的初学者的艰难问题......
答案 0 :(得分:0)
您应该考虑创建自定义控件并使用AlternateContent属性。看看这些,你会发现数百个教程。
这是一个快速google search,可帮助您开始使用其他内容。
答案 1 :(得分:0)
所以,总而言之,我想要一个可以在不同模式或状态下工作的控件。该模式也会影响XAML属性和代码逻辑。
似乎VisualStateManager在其可以操作的属性方面非常有限。但是当差异只是视觉上时,它是最好的选择。
当XAML存在其他差异时,显而易见的选择是从XAML中省略这些属性并在代码中设置它们,就像在ctor中一样。一种更好的方法是在代码中将这些属性公开为依赖属性,绑定到用户控件的XAML中的那些属性,然后您可以在使用此用户控件的其他XAML中指定这些属性。如果您的控件不关心这些属性中的内容,那么它也是一个很好的设计选择。但是,在我的情况下,设置这些不同的属性应该是用户控件本身的责任,而不是它的父级,并且我只想公开单个模式属性,这不好。
对于这种情况,我到目前为止找到的最好的方法是:
这样,您可以从外部轻松指定您希望控件在哪种模式下工作。缺点是更改模式并不容易,因为它不是您需要更改的属性,而是类型和实例。控制。
最后,当存在代码逻辑差异时,一种方法是暴露模式属性,或者使用上面描述的抽象类方法。例如,按钮单击处理函数也可以是抽象的。