主题是我已经定义了一个绑定到DataContext的自定义控件。我希望根据DataContext的特定属性值动态更改控件模板。
我想到了两种方法,但我不知道哪种方式更好。
1.不要在ResourceDictionary中使用控件模板,并且控件的所有细节都在C#代码中定义。使用DependencyProperty CallBack方法在DataContext的属性值更改时呈现控件。
2.在ResourceDictionary中定义控件模板,并使用DataTrigger更改'Control.Template'属性。
在我的应用程序中,将创建此类型的数千个实例,因此如果ControlTemplate更改无效,则实际上是不可接受的。
你能给我一些建议或更好的解决方案吗?
答案 0 :(得分:1)
如果涉及数千个复杂控件实例,则使用任何标准WPF技术可能无效。请参阅http://msdn.microsoft.com/en-us/magazine/dd483292.aspx。
我会使用MultiBinding + IMultiValueConverter来控制Control.Template,因为Template会依赖于多个DataContext属性,并且可能涉及复杂的逻辑。
答案 1 :(得分:0)
也许您可以在ContentPresenter
中使用ControlTemplate
来自定义部分控件。您可以为自动应用的可自定义部分提供DataTemplate
。
答案 2 :(得分:0)
我会使用带有数据触发器的样式来控制显示哪个模板。像这个例子:
<Style x:Key="Die1Face" TargetType="{x:Type Button}">
<Setter Property="Template" Value="{StaticResource dieNone}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ThrowDie1[0]}" Value="1" >
<Setter Property="Template" Value="{StaticResource dieOneA}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ThrowDie1[0]}" Value="2" >
<Setter Property="Template" Value="{StaticResource dieTwoA}" />
</DataTrigger>
</Style.Triggers>
</Style>
这将提供您所需的灵活性。