Page2.xaml
という名前で2つ目の.xamlページを設定しました。ボタンをクリックすると、ユーザーがPage2.xaml
私は私の内部のボタンにこれを持っていますPage1.xaml
:
<Grid>
<Button x:Name="localModeBtn"
Style="{StaticResource MainButtonStyle}"
Content="local mode"
Click="localModeBtn_Click" />
</Grid>
そして、ボタンイベントハンドラについて:
private void localModeBtn_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri("Page2.xaml", UriKind.Relative);
this.NavigationService.Navigate(uri);
}
ボタンをクリックすると、「リソースが見つかりませんpage2.xaml
」というエラーが表示されますPage2.xaml
は-と同じフォルダにありますPag1.xaml
どこに問題があるのかわかりませんか?
私自身の質問への解決策:
私自身の質問に対する解決策を提供することは少しばかげていますが、Jastiのおかげで link コードを整理することができました。彼はコメントを投稿しただけだったので、それを回答としてマークすることはできません。そのため、これが解決策です。
NavigationWindowをWindowに変更して挿入しました。
<DockPanel>
<Frame x:Name="_NavigationFrame" NavigationUIVisibility="Hidden" />
</DockPanel>
そして、追加したMainWindow.xaml.csのコンストラクター内で:
_NavigationFrame.Navigate(new Page1());
次に、ボタンイベントハンドラーを次のように調整しました。
this.NavigationService.Navigate(new Uri("Pages/Page2.xaml", UriKind.Relative));
あなたはこれを使うべきです、これは me のために働きました:
var Page2= new Page2(); //create your new form.
Page2.Show(); //show the new form.
this.Close(); //only if you want to close the current form.
variable type
ソリューション内のpage.xaml正しい名前のページ。その後、そのメソッドを使用して機能的に実行する必要があります。
別のウィンドウが必要な場合
NavigationWindow navWIN = new NavigationWindow();
navWIN.Content = new pageWFbchAdmin();
navWIN.Show();
//winBchAdmin.ShowDialog();
private void Navigate_Click(object sender, RoutedEventArgs e)//By Prince Jain
{
this.NavigationService.Navigate(new Uri("Page3.xaml", UriKind.Relative));
}
これにはC#コードは必要ありません。XMLで実行するだけです。
<Button Content="local mode"
Command="NavigationCommands.GoToPage"
CommandParameter="/Page2.xaml"/>
(再フォーマットされたコードはテストされていません)
私の解決策は、メインウィンドウにフレームを追加することでしたMainWindow.xaml
<Frame Name="Main" Content="" Margin="127,0,0,0" Background="#FFFFEDED" />
ナビゲーション用:
1-ボタンクリックでメインウィンドウから移動する:
private void Button_Click(object sender, RoutedEventArgs e)
{
// navigate to pages/projects.xaml inside the main frame
Main.Content = new MyProject.Pages.Projects();
}
2-フレーム内のページからのナビゲーションの場合ex Projects.xaml
// declare a extension method in a static class (its your choice if you want to reuse)
// name the class PageExtensions (you can choose any name)
namespace MyProject
{
public static class PageExtensions
{
public static void NavigateTo(this Page page, string path)
{
Frame pageFrame = null;
DependencyObject currParent = VisualTreeHelper.GetParent(page);
while (currParent != null && pageFrame == null)
{
pageFrame = currParent as Frame;
currParent = VisualTreeHelper.GetParent(currParent);
}
if (pageFrame != null)
{
pageFrame.Source = new Uri(path, UriKind.Relative);
}
}
}
}
// to navigate from 'pages/projects.xaml' to another page
// heres how to call the extension on button click
this.NavigateTo("NewProject.xaml");
さらに、コンストラクターにパラメーターを渡す場合は、別のPage
オブジェクトを必要とする別の拡張メソッドを追加できます。
// overloading NavigateTo
public static void NavigateTo(this Page page, Page anotherPage)
{
Frame pageFrame = null;
DependencyObject currParent = VisualTreeHelper.GetParent(page);
while (currParent != null && pageFrame == null)
{
pageFrame = currParent as Frame;
currParent = VisualTreeHelper.GetParent(currParent);
}
// Change the page of the frame.
if (pageFrame != null)
{
pageFrame.Navigate(anotherPage);
}
}
// usage
this.NavigateTo(new Pages.EditProject(id));
任意のコンテナーを使用して、コンテンツをビューモデルまたは分離コードの任意のプロパティにバインドします。その後、新しいページを設定してプロパティを更新し、PropertyChangedイベントを呼び出すだけです(INotifyPropertyChangedインターフェイスを参照)。これによりコンテナのコンテンツが更新され、必要なものをすべて表示できます。