我想创建一个包含一个组合框和一个内容控件的用户控件。在组合框中所做的选择应确定内容控件将使用的数据模板。我读过this article,几乎可以说明我要实现的目标。
组合框填充了enum ModelType
值,可以是Person
或Company
。如果用户选择Person
,则内容控件应使用personTemplate
数据模板;和companyTemplate
表示Company
。
我陷入了内容控件的XAML代码的困境。这是我创建的,但无法正常运行:
<UserControl.Resources>
...
<DataTemplate x:Key="personTemplate" ...>
<DataTemplate x:Key="companyTemplate" ...>
...
</UserControl.Resources>
...
<ContentControl x:Name="Account">
<ContentControl.ContentTemplate>
<DataTemplate>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding AccountType}" Value="Person">
<!-- I doubt the Value property is set correctly. -->
<!-- It should be a value of an enum ModelType -->
<Setter
TargetName="Account"
Property="ContentTemplate"
Value="{StaticResource personTemplate}" />
<!-- The setter is unaware of the target name, i.e. content control -->
</DataTrigger>
<DataTrigger Binding="{Binding AccountType}" Value="Company">
<Setter
TargetName="Account"
Property="ContentTemplate"
Value="{StaticResource companyTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
请帮忙,谢谢。
最佳答案
实际上,它可以正常工作。 :)
XAML应该是这样的:
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding AccountType}" Value="Person">
<Setter Property="ContentTemplate" Value="{StaticResource personTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding AccountType}" Value="Company">
<Setter Property="ContentTemplate" Value="{StaticResource companyTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
枚举的值也很好用。我希望这可以帮助一些需要帮助的人。
关于wpf - WPF:如何设置内容控制的数据模板触发器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5771362/