正确/不正确使用委托以实现可扩展性

Gri*_*fin 7 c# generics code-reuse animation delegates

我试图让我的GUI库用户不受限制地自定义输入/输出过渡效果,同时仍然保持简单/防止误用(当控件进入或退出视图时).

为此,我向Control类添加了一个委托,它将采用Control引用和转换完成百分比,以便用户能够以他想要的任何方式平滑地转换控件的位置/不透明度,基于给定百分比.他所要做的就是在控制进入/退出之前订阅过渡功能.

但是,我意识到仅使用当前完成百分比来转换/动画控件是不可能的,因为您还必须存储和比较控件的初始位置.
为了明确这个存储要求,我应该强制使用委托函子吗?

如果是这样,我怎么能以简约/干净的方式做到这一点?


随意提出另一种方法,允许用户应用自定义过渡动画!

Dus*_*san 1

如果我理解正确,您的控件会调用动画(计算)委托(不时,可能在每一帧上)并传递过渡竞争百分比。然后,动画委托计算并将平移和位置返回/应用到控件。它是否正确?

假设上述正确,有几种解决方案:

  1. 仅对位置和不透明度进行动画处理时:

    除了竞争百分比之外,您还必须在调用委托时发送控制位置的初始状态和不透明度。必须在转换开始时记住初始状态,并在每次调用中将其发送到委托中。

  2. 一般来说,当对任意属性进行动画处理时:

    除了竞争百分比之外,您还提供状态属性(对象类型甚至更好的字典)。此 State 属性完全由委托及其动画逻辑控制。

    对于您的控件来说,状态属性不会有任何语义或含义。您的控件仅必须在后续调用委托之间保留 State 属性的值。

    总而言之,委托在第一次调用时用初始值填充状态,在后续调用中使用这些值 - 做任何它想做的事情。委托还将计算值应用于控制。请注意,可以在委托中使用的所有属性都必须是公共的。