Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

wpf custom control not recognized

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.

like image 720
Klay Avatar asked Sep 30 '09 14:09

Klay


1 Answers

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.

like image 144
Scott Avatar answered Oct 23 '22 22:10

Scott