views:

349

answers:

1

This is my first foray into custom controls, and it's not going well. I have a custom graph control derived from Canvas.

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

It's defined in the same project and namespace as my app. I tried adding a reference to the control in XAML as follows:

<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>

But when I try to reference the control name "seriesManager" in the code-behind for the Window, I get "The name 'seriesManager' does not exist in the current context."

Furthermore, the XAML editor will not render the Window, giving a huge stack trace with the error: "Type 'MS.Internal.Permissions.UserInitiatedNavigationPermission' in Assembly 'PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable."

I imagine the solution is something stupidly simple for anyone who's done custom controls. But I'm stumped.

+1  A: 

did you try x:Name="seriesManager" in your xaml?

Edit: This may not be the issue seeing how you said your xaml isn't rendering. I'm guessing once you get the xaml to render in the designer... the code behind will work better.

Edit 2: Whenever I've had a problem with the designer rendering, it's because I'm doing something in the constructor of my custom control. Check your SeriesManager to see if you are doing something in its constructor that is causing a problem. Maybe you are referencing something that doesn't exist yet. If you do have extra code in your constructor, consider moving it to the UserControl_Loaded event.

Scott
x:Name is required for references within the same assembly, this should fix the issue of not being able to reference "seriesManager" in the code-behind. more info: http://stackoverflow.com/questions/1380112/why-cant-i-use-the-name-attribute-on-usercontrol-in-the-same-assembly
Zenuka
Oh and BTW using the x:Name instead of Name could fix all your problems, try this first and let us know if there are more problems...
Zenuka
x:Name fixed it! Thanks!
Klay