2011-03-28 9 views
5

Tengo un control definido en xaml con un número bastante grande de conjunto de propiedades que es difícil de reproducir en el código subyacente. ¿Puedo definir el control en xaml y de alguna manera crear instancias de él en el código?WPF Crear instancias de controles definidos en xaml

+0

Los controles no se pueden definir solo en XAML, aún tendrá un código detrás, aunque en algunos casos el código detrás solo puede contener la línea 'InitializeComponent()'. – Snowbear

+0

Entiendo eso. Pero digo, por ejemplo, tengo un cuadro de texto definido en xaml. ¿Puedo crear instancias del mismo cuadro de texto con las mismas propiedades en el código? – Aks

+1

¿Necesita crearlo en código, o simplemente necesita poder replicar esos valores de propiedad fácilmente? Consulte mi respuesta para obtener un ejemplo simple de cómo hacer esto último ... –

Respuesta

10

Otra opción es crear el control como un recurso con el x: Compartido = "false" propiedad si desea obtener nuevas instancias de cada propuesta:

<UserControl.Resources> 
    <Rectangle x:Key="MyControl" x:Shared="False" 
      ... 
      /> 
</UserControl.Resources> 

En código:

var myNewCtrl = this.FindResource("MyControl") as Rectangle; 
// use control 
+0

Ooh, +1! Nunca recuerdo 'x: Shared' :-) –

+0

Beautiful. Gracias – Aks

0

¿Ha considerado crear el control como UserControl?

+0

No es una mala idea, pero podría ser exagerado si solo quiere configurar propiedades específicas en un 'TextBox'. –

1

Puede establecer cualquier cantidad de propiedades con un Estilo Xaml y volver a aplicar ese estilo, ya sea directamente a una instancia separada del control o como base para un estilo diferente. Este último le permitiría especificar sus propiedades comunes, pero aún así, por ejemplo, tienen diferentes configuraciones visuales para cada control.

Así, en lugar de tratar de reproducir esta:

<TextBlock Width="100" Height="40" FontSize="10" ClipToBounds="True" /> 

... definir esto en un archivo de recursos compartidos:

<Style TargetType="TextBlock" x:Key="myStyle"> 
    <Setter Property="Width" Value="100" /> 
    <Setter Property="Height" Value="40" /> 
    <Setter Property="FontSize" Value="10" /> 
    <Setter Property="ClipToBounds" Value="True" /> 
</Style> 

... y luego utilizar esta en el marcado:

<TextBlock Style="{StaticResource myStyle}" /> 

El mismo principio se aplica a cualquier control y conjunto de propiedades.

+0

El estilo es una muy buena solución. También puede crear estilos para dirigirse a controles personalizados/de usuario. Solo puede establecer DependencyProperties en estilos. –