wpf自定义控件无法识别

时间:2009-09-30 14:07:08

标签: wpf custom-controls

这是我第一次涉足自定义控件,而且进展不顺利。我有一个从Canvas派生的自定义图形控件。

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

它在与我的应用程序相同的项目和命名空间中定义。我尝试在XAML中添加对控件的引用,如下所示:

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

但是当我尝试在Window的代码隐藏中引用控件名“seriesManager”时,我得到“当前上下文中不存在名称'seriesManager'。”

此外,XAML编辑器不会渲染窗口,给出了一个巨大的堆栈跟踪错误:“在Assembly'DablicationFramework中输入'MS.Internal.Permissions.UserInitiatedNavigationPermission',Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'未标记为可序列化。“

我认为对于任何完成自定义控件的人来说,解决方案都是非常简单的。但我很难过。

2 个答案:

答案 0 :(得分:11)

你在xaml中尝试了x:Name =“seriesManager”吗?

编辑:这可能不是看你说你的xaml没有渲染的问题。我猜测一旦你在设计师中得到xaml渲染......后面的代码会更好。

编辑2:每当我遇到设计器渲染问题时,都是因为我在自定义控件的构造函数中做了一些事情。检查您的SeriesManager以查看您是否在其构造函数中执行了导致问题的操作。也许你正在引用一些尚不存在的东西。如果构造函数中有额外的代码,请考虑将其移动到UserControl_Loaded事件。

答案 1 :(得分:0)

在这里支持斯科特的答案,因为他帮助我解决了这个问题:

我做错了是尝试访问BEFORE InitializeComponent(),但是被代码中其他地方的其他两条错误消息搞糊涂了。 以防其他人有此错误。