wpf自定义控件无法识别

Kla*_*lay 5 wpf custom-controls

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

namespace Grapher2 {
    public class SeriesManager : Canvas {
        public SeriesManager() {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它与我的应用程序在同一个项目和命名空间中定义.我尝试在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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sco*_*ott 11

你在你的xaml中尝试过x:Name ="seriesManager"吗?

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

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

  • x:同一程序集中的引用需要名称,这应解决无法在代码隐藏中引用"seriesManager"的问题.更多信息:http://stackoverflow.com/questions/1380112/why-cant-i-use-the-name-attribute-on-usercontrol-in-the-same-assembly (4认同)