我编写了一个简单的回收控件工厂,用于创建和回收控件。这个想法很简单:工厂将 Func 函数作为构造函数中的参数。它还有一个用于回收的 FrameworkElements 内部堆栈。工厂的GetControl方法的实现方式很明显:如果堆栈中有控件,则返回它。在另一种情况下,创建一个新控件。
想象一个简单的情况。我的控制只是
<Border BorderBrush="Black" BorderThickness="5" Width="100" Height="30"
Background="{Binding RelativeSource={RelativeSource AncestorType=StackPanel},
Path=Background}" />
有两个不同背景的 StackPanel:第一个是红色的,第二个是绿色的。我向第一个堆栈面板添加了一个新控件(使用工厂)。它有一个红色背景。我向第二个堆栈面板添加了一个控件。它有一个绿色的背景。然后我从第一个堆栈面板中删除控件。它被回收了。我将控件添加到第二个 StackPanel。但它有一个红色的背景!似乎 RelativeSource 触发器没有更新。
有什么办法可以处理这种情况吗?