visual C# 2010 Express を使用しています。
WPFでPage1.xamlとPage2.xamlを用意して
Page1.xaml.cs内で
private void button1_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new Uri("./Page2.xaml"));
}
と記述し、ボタンをクリックしたのですが、次のような
「無効な URI: URI の形式を決定できませんでした。」
というエラーが出てしまいます・・・
たしかにPage2.xamlは存在するのですが、なぜこのようなエラーが出るのでしょうか?
ちなみに
this.NavigationService.Navigate(new Page2());
だとちゃんと移動できます。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
Page系は使ったことが無かったのですが,テストプログラムを動作させてみたところ,
LoadイベントでNavigationService.Sourceから取得することになります。
ただし,単純に引っ張ってはこれないので,
nwe Uri(new Uri("http://www.example.com", UriKind.Absolute), NavigationService.Source.ToString()).Query
でクエリ文字列を取得するようです。
ご回答ありがとうございます。
なるほど、結構複雑ですね。参考になりました。
ただ試してみたのですが、自分の環境ではどうもうまくいかないですね・・・
そこで
[Page1.xaml]
<Hyperlink RequestNavigate="Page_RequestNavigate" NavigateUri="Page2.xaml" Name="n1">Page2</Hyperlink>
[Page1.xaml.cs]
private void Page_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Application.Current.Properties["msg1"] = "ここにメッセージを入れる";
}
[Page2.xaml.cs]
MessageBox.Show(Application.Current.Properties["msg1"].ToString());
でなんとかメッセージを得ることができました。。
すいません、もう一つ質問があるのですが、
[Page1.xaml]に次のように記述すると
<Grid>
<Hyperlink RequestNavigate="Page_RequestNavigate" NavigateUri="Page2.xaml" Name="n1">Page2</Hyperlink>
<Run Text=" | " />
<Hyperlink RequestNavigate="Page_RequestNavigate" NavigateUri="Page2.xaml" Name="n2">Page2</Hyperlink>
</Grid>
「型'Hyperlink'の値は、型'UIElementCollection'のコレクションまたは辞書に追加されません」
というエラーが出てしまいます・・・
<TextBlock>
<Hyperlink RequestNavigate="Page_RequestNavigate" NavigateUri="Page2.xaml" Name="n1">Page2</Hyperlink>
<Run Text=" | " />
<Hyperlink RequestNavigate="Page_RequestNavigate" NavigateUri="Page2.xaml" Name="n2">Page2</Hyperlink>
</TextBlock>
これなら大丈夫なのですが、これはどういうエラーなのでしょうか?
回避するというか<Grid>内では使えないのでしょうか?
No.2
- 回答日時:
参考にされているページがWindows Phone 7用のページのようですが,
Windows Phone 7で使われているのはWPFではなくSilverlightです。
基本的な考え方は同じなのですが,細かなところでWPFとSilverlightの間には差異があります。
# Browser PluginのSilverlightと,WP7のSilverlightに差異があるのも困りものなのですが……。
今回のNavigationContextについは,Silverlightのみに存在するプロパティおよびクラスになります。
このため,WPFで使うことはできません。
NavigationService.SourceでUriが取得できるので,
QueryStringプロパティをとおして値を取得することになると思います。
ご回答ありがとうございます。
なるほど、Silverlightですか。。
自分は聞いたことはあるのですが、どういうものか大雑把に想像はつきますが
よくはわからないですね・・・
一応、次のように試してみたのですが、
try
{
string inputVal = "";
inputVal = NavigationService.Source.Query.ToString();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
「オブジェクト参照がオブジェクトインスタンスに設定されていません」
というエラーが出てきてしまいます・・・
NavigationService.SourceでQueryStringプロパティがなかったので(インテリセンスで現れない)
のでこのような処理にしたのですが、どのように記述するべきなのでしょうか?
一応
[Page1.xaml.cs]側で
Application.Current.Properties["msg1"] = "aaaa";
[Page2.xaml.cs]側で
MessageBox.Show(Application.Current.Properties["msg1"].ToString());
これなら受け渡しをすることができたのですが、
本題のようにリンクのパラメーターで受け渡しをしたいです。
No.1
- 回答日時:
MSDN: Uri コンストラクター (String) (System)
http://msdn.microsoft.com/ja-jp/library/z6c2z492 …
のUriFormatExceptionの例に,色々書いてありますし,解説には,
「このコンストラクターは、string パラメーター参照が絶対 URI であることが前提となっており、UriKind を Absolute に設定して Uri コンストラクターを呼び出すのと同じ結果になります。」
と書いてあります。
今回の場合,絶対Uriではなく相対Uriなので,
this.NavigationService.Navigate(new Uri("./Page2.xaml", UriKind.Relative));
もしくは,
this.NavigationService.Navigate(new Uri("./Page2.xaml", UriKind.RelativeOrAbsolute));
とする必要があります。
ご回答ありがとうございます。
それを試してみましたが、できました。
ありがとうございます。
それで今気づいたのですが、自分は
this.NavigationService.Navigate(new Uri("./Page2.xaml"), UriKind.RelativeOrAbsolute);
で試していました・・・見間違いでした。。
それともう一つ疑問があるのですが、次のようにパラメータにメッセージを付加したいと思い、
this.NavigationService.Navigate(new Uri("./Page2.xaml?msg1=aa", UriKind.RelativeOrAbsolute));
Page2.caml.cs側で、
public Page2()
{
InitializeComponent();
string inputVal = "";
if (NavigationContext.QueryString.TryGetValue("msg1", out inputVal))
{
}
}
と記述したのですが、コンパイルの時点で
「名前 'NavigationContext' は現在のコンテキスト内に存在しません。」
というエラーが出てしまいます・・・
Page2.caml.csにはちゃんとusing System.Windows.Navigation;を記述しているのですが、
何が足りないのでしょうか?
http://techbooster.jpn.org/andriod/9517/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- 工学 以前、線形代数からフーリエ級数展開を導く上で 式v=(v, e1)e1+(v, e2)e2+…+(v 6 2022/06/29 17:24
- 物理学 波の合成についてです E1(z,t)=A0cos(kz-ωt+Φ) E2(z,t)=A0cos(kz 1 2022/10/10 06:35
- 数学 「(((a0)/2)・1, 1) …(a0)/2の1倍と1の内積 =(a0)(1, 1) …1 と1 5 2022/07/05 19:11
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) 別のファイルへ条件を指定してセルの値を転記したい 4 2022/04/04 15:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
VBA:小数点以下の数字を取得で...
-
Flexgridで選択行の列の値を取...
-
データ数をカウントしたいのですが
-
ディスプレイの表示可能な解像...
-
COMポート 名前を取得する方法
-
JavaScriptでWindowsログオンID...
-
like演算子内に変数って使えな...
-
C言語におけるコンピュータ名・...
-
年月日時分秒の変数を教えて下さい
-
Yahoo! JAPANのID取得について
-
getParameter と getAttribut...
-
アクセスしてきたコンピュータ...
-
エクセルVBAで複数選択できるよ...
-
URIでのページの移動について
-
Active directoryの全グループ取得
-
NTPサーバから時刻を取得する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
count(*)で取得した値をJAVAの...
-
データ数をカウントしたいのですが
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
Flexgridで選択行の列の値を取...
-
エクセルVBAで複数選択できるよ...
-
JavaScriptでWindowsログオンID...
-
利用者側のMACアドレスを取得し...
-
郵便番号検索APIにてget Elemen...
-
COMポート 名前を取得する方法
-
コンボボックス表示文字列を取...
-
VBA Shapesの座標からセル位置...
-
Spreadの選択行の取得について
-
VBScriptで数値にコンマを付け...
-
C言語におけるコンピュータ名・...
-
Excel VBA でログインしてい...
おすすめ情報