wpf - controles - xaml pdf español
WPF: ¿Cómo configurar la activación de la plantilla de datos para el control de contenido? (1)
Quiero crear un control de usuario que contenga un cuadro combinado y un control de contenido. La elección realizada en el cuadro combinado debería determinar la plantilla de datos que usaría el control de contenido. He leído este artículo que demuestra bastante bien lo que estoy tratando de lograr.
El cuadro combinado se completa con los valores enum ModelType
, que pueden ser Person
o Company
. Si el usuario elige Person
, el control de contenido debe usar la plantilla de datos personTemplate
; y companyTemplate
for Company
.
Me quedé atrapado con el código XAML para el control de contenido. Esto es lo que he creado, pero no puedo hacerlo funcionar:
<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>
Por favor ayuda, gracias.
De hecho lo hice funcionar. :)
Esto es lo que se supone que debe ser el 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>
Los valores de la enumeración también funcionan bien. Espero que esto ayude a algunas personas necesitadas.