Tengo un conjunto de controles con comandos adjuntos y lógica que se reutilizan constantemente de la misma manera. Decidí crear un control de usuario que contenga todos los controles comunes y la lógica.Cómo crear un WPF UserControl con contenido NOMBRADO
Sin embargo, también necesito el control para poder contener contenido que se puede nombrar. Intenté lo siguiente:
<UserControl.ContentTemplate>
<DataTemplate>
<Button>a reused button</Button>
<ContentPresenter Content="{TemplateBinding Content}"/>
<Button>a reused button</Button>
</DataTemplate>
</UserControl.ContentTemplate>
Sin embargo, parece que cualquier contenido colocado dentro del control de usuario no puede nombrarse. Por ejemplo, si uso el control de la siguiente manera:
<lib:UserControl1>
<Button Name="buttonName">content</Button>
</lib:UserControl1>
recibo el siguiente error:
Cannot set Name attribute value 'buttonName' on element 'Button'. 'Button' is under the scope of element 'UserControl1', which already had a name registered when it was defined in another scope.
Si quito el buttonname, a continuación, se compila, sin embargo tengo que ser capaz de nombrar el contenido. ¿Cómo puedo conseguir esto?
Esto es una coincidencia. ¡Estaba a punto de hacer esta pregunta! Tengo el mismo problema. Factorizar el patrón de IU común en un UserControl, pero querer hacer referencia a la IU de contenido por nombre. – mackenir
¿Por qué no usa ResourceDictionary? Defina el DataTemplate en él. O use la palabra clave BasedOn para heredar el control. Solo algunos caminos que seguiría antes de hacer una IU de código subyacente en WPF ... –
Este tipo encontró una [solución] (http://blog.bluecog.co.nz/archives/2007/08/27/wpf-cannot -set-name-attribute /) que implica deshacerse del archivo XAML de su control personalizado y crear la interfaz de usuario del control personalizado mediante programación. Esta [publicación de blog] (http://rrelyea.spaces.live.com/Blog/cns!167AD7A5AB58D5FE!2130.entry?wa=wsignin1.0&sa=752255111) tiene más que decir sobre el tema. – mackenir