我正在实现一个主从视图(也尝试使用 MVVM)。Master 是一个ListBox
包含 5 种不同类型的项目(所有在 Master 中的格式相同)。根据在 Master 中选择的对象类型,Detail 具有不同的表单字段。我正在使用一个DataTemplateSelector
,遵循这个CodeProject 教程。根据中选择的项目选择了正确的模板ListBox
,但是存在一个奇怪的引用问题。
如果我从Type1
master 中的一个项目转到另一个项目Type1
,它们都将使用完全相同的模板。这听起来不错,但由于它是同一个引用,因此第一项中正在进行的任何动画都将显示在第二项中。如何强制单独应用模板,以便一个视图中的动画与另一个视图对模板的使用分开?
代码示例:(ContentControl
呈现细节)
<ContentControl Content="{Binding Path=CVS.View.CurrentItem}">
<ContentControl.ContentTemplate>
<DataTemplate>
<vms:MyTemplateSelector Content="{Binding}">
<vms:MyTemplateSelector.Template1>
<DataTemplate>
<views:Type1View />
</DataTemplate>
</vms:MyTemplateSelector.Template1>
<vms:MyTemplateSelector.Template2>
<DataTemplate>
<views:Type2View />
</DataTemplate>
</vms:MyTemplateSelector.Template2>
<vms:MyTemplateSelector.Template3>
<DataTemplate>
<views:Type3View />
</DataTemplate>
</vms:MyTemplateSelector.Template3>
<vms:MyTemplateSelector.Template4>
<DataTemplate>
<views:Type4View />
</DataTemplate>
</vms:MyTemplateSelector.Template4>
<vms:MyTemplateSelector.Template5>
<DataTemplate>
<views:Type5View />
</DataTemplate>
</vms:MyTemplateSelector.Template5>
</vms:MyTemplateSelector>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
编辑- 添加动画代码
此动画代码通过作用于 SelectionChanged 事件的行为在 ComboBoxes 上执行。在运行它之前,我会检查 ComboBox 是否有焦点。此动画仅在未聚焦时才会发生,作为必须修改其先前选择的视觉提示。
public void AnimateComboBox(ComboBox cbo)
{
LinearGradientBrush myBrush = new LinearGradientBrush();
myBrush = Extensions.Clone<LinearGradientBrush>(cbo.BorderBrush as LinearGradientBrush);
cbo.BorderBrush = myBrush;
Storyboard sb = new Storyboard();
sb.Duration = new Duration(TimeSpan.FromMilliseconds(3000));
foreach(GradientStop s in myBrush.GradientStops)
{
ColorAnimation anim = new ColorAnimation();
anim.To = Colors.Red;
anim.Duration = new Duration(TimeSpan.FromSeconds(0.5));
anim.AutoReverse = true;
anim.RepeatBehavior = RepeatBehavior.Forever;
Storyboard.SetTarget(anim, s);
Storyboard.SetTargetProperty(anim, new PropertyPath(GradientStop.ColorProperty));
sb.Children.Add(anim);
}
sb.Begin();
}
Extensions.Clone 来自Silverlight 论坛