2009-09-30 18 views
5

Esta es mi primera incursión en controles personalizados, y no está yendo bien. Tengo un control de gráfico personalizado derivado de Canvas.wpf control personalizado no reconocido

namespace Grapher2 { 
    public class SeriesManager : Canvas { 
     public SeriesManager() { 
      ... 
     } 
    } 
} 

Se define en el mismo proyecto y espacio de nombres que mi aplicación. He intentado añadir una referencia al control en XAML de la siguiente manera:

<Window x:Class="Grapher2.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:graph="clr-namespace:Grapher2" 
Title="Grapher" Width="800" Height="600"> 

<StackPanel Name="container" Width="700" Height="500"> 
    <graph:SeriesManager Name="seriesManager" Width="700" Height="500" /> 
</StackPanel> 

Pero cuando intento hacer referencia al nombre de control "seriesManager" en el código subyacente de la ventana, me sale "El nombre 'seriesManager' no existe en el contexto actual. "

Además, el editor XAML no representará la Ventana, dando un gran seguimiento de la pila con el error: "Escriba 'MS.Internal.Permissions.UserInitiatedNavigationPermission' en Assembly 'PresentationFramework, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'no está marcado como serializable. "

Imagino que la solución es algo estúpidamente simple para cualquiera que haya realizado controles personalizados. Pero estoy perplejo.

Respuesta

11

¿Has intentado x: Name = "seriesManager" en tu xaml?

Editar: Este puede no ser el problema al ver cómo dijiste que tu xaml no se está procesando. Supongo que una vez que obtenga el xaml para renderizar en el diseñador ... el código detrás funcionará mejor.

Editar 2: Cuando he tenido un problema con la representación del diseñador, es porque estoy haciendo algo en el constructor de mi control personalizado. Verifique su SeriesManager para ver si está haciendo algo en su constructor que está causando un problema. Tal vez estás haciendo referencia a algo que aún no existe. Si tiene código adicional en su constructor, considere moverlo al evento UserControl_Loaded.

+4

x: El nombre es necesario para las referencias dentro del mismo ensamblaje, esto debería solucionar el problema de no poder hacer referencia a "serialManager" en el código subyacente. más información: http://stackoverflow.com/questions/1380112/why-cant-i-use-the-name-attribute-on-usercontrol-in-the-same-assembly – Zenuka

+0

Oh y BTW usando la x: Name en su lugar de Name podría solucionar todos sus problemas, intente esto primero y avísenos si hay más problemas ... – Zenuka

+1

x: ¡El nombre lo arregló! ¡Gracias! – Klay

0

Copia de seguridad de respuesta de Scott aquí, ya que ayudó a resolverlo:

Lo que mal me estaba tratando de acceder al control antes de InitializeComponent(), pero estaba confundido por otros 2 mensajes de error en alguna parte del código. Solo en caso de que alguien más tenga este error.

Cuestiones relacionadas