这是我第一次涉足自定义控件,而且进展不顺利。我有一个从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'未标记为可序列化。“
我认为对于任何完成自定义控件的人来说,解决方案都是非常简单的。但我很难过。
答案 0 :(得分:11)
你在xaml中尝试了x:Name =“seriesManager”吗?
编辑:这可能不是看你说你的xaml没有渲染的问题。我猜测一旦你在设计师中得到xaml渲染......后面的代码会更好。
编辑2:每当我遇到设计器渲染问题时,都是因为我在自定义控件的构造函数中做了一些事情。检查您的SeriesManager以查看您是否在其构造函数中执行了导致问题的操作。也许你正在引用一些尚不存在的东西。如果构造函数中有额外的代码,请考虑将其移动到UserControl_Loaded事件。
答案 1 :(得分:0)
在这里支持斯科特的答案,因为他帮助我解决了这个问题:
我做错了是尝试访问BEFORE InitializeComponent(),但是被代码中其他地方的其他两条错误消息搞糊涂了。 以防其他人有此错误。