2009-09-30 4 views
5

これは私の最初のカスタムコントロールへの進出であり、うまくいかない。私はCanvasから派生したカスタムグラフコントロールを持っています。wpfカスタムコントロールが認識されない

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

私のアプリケーションと同じプロジェクトと名前空間で定義されています。

<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」を参照しようとしたとき、私は「名前を取得します:私は次のようにXAMLでコントロールへの参照を追加してみました'seriesManager'は現在のコンテキストに存在しません。 "

さらに、XAMLエディタは、このウィンドウをレンダリングせず、「Assembly 'PresentationFramework、Version = 3.0.0.0、Culture = neutral」に「MS.Internal.Permissions.UserInitiatedNavigationPermission」と入力すると、 PublicKeyToken = 31bf3856ad364e35 'はシリアル化可能としてマークされていません。

解決策は、カスタムコントロールを行った人にとっては何かばかげて単純だと思います。しかし、私は困惑しています。

答えて

11

x:Name = "seriesManager"をxamlで試しましたか?

編集:これは、あなたのxamlがレンダリングされていないと言ったことを見るのには問題ではないかもしれません。私はあなたがデザイナーでレンダリングするxamlを取得すると推測しています...コードの背後には、より良い動作します。

編集2:私がデザイナーのレンダリングに問題があったときは、自分のカスタムコントロールのコンストラクタで何かをしているからです。 SeriesManagerを調べて、コンストラクターで問題の原因となっていることがあるかどうかを確認します。たぶんあなたはまだ存在しないものを参照しているかもしれません。コンストラクタに余分なコードがある場合は、それをUserControl_Loadedイベントに移動することを検討してください。彼は私がそれを解決する助けているので、ここではScottの答えをバックアップ

+4

x:名前は同じアセンブリ内の参照に必要です。これは、コードビハインドで "seriesManager"を参照できないという問題を修正するはずです。 more info:http://stackoverflow.com/questions/1380112/why-cant-i-use-the-name-attribute-on-usercontrol-in-the-same-assembly – Zenuka

+0

代わりにx:Nameを使用したああとBTW名前のあなたのすべての問題を解決することができます、これを最初に試してみてください、より多くの問題がある場合はお知らせください... – Zenuka

+1

x:名前はそれを修正!ありがとう! – Klay

0

私が間違っていた何が)(InitializeComponentの前に、コントロールにアクセスしようとしていたが、コードのどこか2つの他のエラーメッセージで混乱していました。 他の誰かがこのエラーを起こした場合に備えて。

関連する問題