2009-09-30 135 views
5

這是我第一次進入自定義控件,並且進展不順利。我有一個從Canvas派生的自定義圖形控件。wpf自定義控件不被識別

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> 

但是,當我嘗試引用該控件的名稱「seriesManager」中的代碼隱藏窗口,我得到「這個名字'seriesManager'在當前上下文中不存在。「

此外,XAML編輯器不會渲染窗口,給出一個巨大的堆棧跟蹤錯誤:「類型'MS.Internal.Permissions.UserInitiatedNavigationPermission'在Assembly'PresentationFramework,Version = 3.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35'未標記爲可序列化。「

我想對於完成自定義控件的任何人來說,解決方案都是非常簡單的。但我很難過。

回答

11

你在xaml中試過x:Name =「seriesManager」嗎?

編輯:這可能不是問題,看你如何說你的xaml沒有渲染。我猜你一旦得到了xaml在設計器中渲染......後面的代碼會更好地工作。

編輯2:每當我遇到設計器渲染問題時,都是因爲我在自定義控件的構造函數中做了些什麼。檢查你的SeriesManager,看看你是否在構造函數中做了一些導致問題的事情。也許你正在引用一些還不存在的東西。如果在構造函數中確實有額外的代碼,請考慮將其移至UserControl_Loaded事件。

+4

x:同名組件內的引用需要名稱,這應該解決不能在代碼隱藏中引用「seriesManager」的問題。更多信息:http://stackoverflow.com/questions/1380112/why-cant-i-use-the-name-attribute-on-usercontrol-in-the-same-assembly – Zenuka

+0

哦,順便說一句,用x:Name代替的名稱可以解決你所有的問題,先試試這個,讓我們知道是否有更多的問題... – Zenuka

+1

x:名稱固定它!謝謝! – Klay

0

備份斯科特的答案在這裏,因爲他幫我解決這個問題:

我做錯了什麼試圖訪問控制之前的InitializeComponent(),但被2個其他錯誤消息的代碼別的地方混淆。 以防萬一別人有這個錯誤。