2009-07-09 25 views
0

非常に単純なユーザーコントロールがあり、XAMLでインスタンス化しようとしています。私は名前空間で少し過激になると、x:Nameの問題にぶつかります。ここでUserControlで指定された名前空間がWPFビルドに失敗する

は私のUserControlである:ここでは

<UserControl x:Class="UserControlTest.UserControl1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300"> 
<Grid> 
    <Label Name="Label1">Label</Label> 
</Grid> 
</UserControl> 

は、コードビハインドユーザーコントロールのためです:今

Namespace UserControlTest 
Partial Public Class UserControl1 

End Class 
End Namespace 

、私はに設定私のVB.Netプロジェクトのルート名前空間を持っていることに注意してください"UserControlTest"ここ は私のメインウィンドウです:

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:control="clr-namespace:UserControlTest.UserControlTest" 
Title="Window1" Height="300" Width="300"> 
<Grid> 
    <control:UserControl1 /> 
</Grid> 
</Window> 

は、コントロールの別名は「UserControlTest.UserControlTest」を持っている必要がありますどのように参照してください?私のメインウィンドウを見ている、ということを知っこれは私のプロジェクトのルート名前空間をUserControlTestに設定しているためです。また、UserControlの名前空間もUserControlTestに定義しています。私がUserControlの名前空間を使用しない場合、私は何の問題もありません。しかし

、ビルドが失敗し、私はこれを行っているので、私はXを適用しようとする必要があり、次のように、ユーザーコントロールに名前:

このエラーで、ビルドに失敗します
<control:UserControl1 x:Name="test"/> 

を:

Type 'UserControlTest.UserControlTest.UserControl1' is not defined. 

誰でも説明できますか?私はx:Nameの値を与えることができるように、私のUserControlを名前空間に入れないようにする必要はありますか?私はコードビハインドから自分のUserControlsを操作したいと思います。x:Nameがなければ、私はクリークの上にいます。しかし、私はそれを得るために名前空間の使用を犠牲にしたくありません!

ありがとうございました。

答えて

0

ユーザーコントロールのコードビハインドで定義されている名前空間は何ですか?

プロジェクトの名前がFooで、そのプロジェクト内にコントロールという名前のフォルダがある場合、そのフォルダに追加された新しいユーザーコントロールには名前空間Foo.Controlsが与えられます。

次に、あなたのXAMLでそんなにのようにそれを参照することができます。あなたが命名の問題を持っているよう

xmlns:Controls="clr-namespace:Foo.Controls" 
... 
<Controls:UserControl1 x:Name="uc1"/> 

に思えます。

EDIT:

は、ここで私は私のプロジェクトでそれをやっている方法です。

StatusBar.xaml.cs

namespace Client.Controls.UserControls 
{ 
public partial class StatusBar : UserControl 
{ 
... 
} 
} 

StatusBar.xaml

<UserControl x:Class="Client.Controls.UserControls.StatusBar"> 
</UserControl> 

Main.xaml.cs

using Client.Controls.UserControls; 

namespace Client 
{ 
public partial class Main : Window 
{ 
... 
} 
} 

メイン。xaml

<Window x:Class="Client.Main" 
xmlns:UserControls="clr-namespace:Client.Controls.UserControls"> 
<UserControls:StatusBar x:Name="mainStatusBar" /> 
</Window> 
+0

私のユーザーコントロールは、コードビハインドで定義されている名前空間がありません。 Foo.Controlsの名前は本当ですか?コントロールフォルダとその中に新しいUserControlを追加しました。コードビハインドに定義されている名前空間はありません。私のメインウィンドウXAMLはxmlns:control = "clr-namespace:UserControlTest"(すなわちclr-namespace:UserControlTest.Controlではない)を持ち、コントロール:プレフィックスを使ってXAMLで新しいUserControlを作成することができます。 – TimH

+0

私の編集をご覧ください。うまくいけばそれは理にかなっています。 – David

2

私は同じ問題を抱えていました(プロジェクトを再構築した後、最初は正常に動作しました...)。私はUserControlを別の名前空間に入れました。

0

私はvb.netプロジェクトで同じ問題が発生しましたが、ここや他のところで提案を試しても問題を解決できませんでした。実際には、私は同じプロジェクトのコードを新しいプロジェクトに取り込むことができました。新しいプロジェクトのすべての設定が同じであると判断できる限り、正常に機能しました。 Davidによって提供されるソリューションでは、私は彼がC#を使用していることに気がついています。これがvb.netに関連付けられた奇妙なものかどうかは疑問です。

最後に、私が使用する必要のあるユーザーコントロールは非常に簡単で、この問題を回避するためにリソースControlTemplateとして実装しました。申し訳ありませんが、より良い答えを持っていない、私は本当に満足していない私の所見...

関連する問題