2017-01-15 14 views
1

WPFプロジェクトでは、Windowの内容であるFrameを使用してWindowからPageFunctionに移動しています。問題はPageFunctionで、Windowという呼び出しに戻りません。実際には、PageFunctionのOnReturn(...)を呼び出すと、「PageFunctionのNavigationWindowが既に閉じられているか、別のコンテンツにナビゲートしている」というInvalidOperationExceptionがスローされます。WPF:なぜPageFunctionは呼び出し元のウィンドウに戻りませんか?

なぜ例外がスローされるのですか?

事前のお手伝いがあります。

MainWindow.xaml

<Window x:Class="WpfApplication3.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication3" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Frame x:Name="frame" /> 

メインウィンドウコードの後ろ:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var myPageFunction = new MyPageFunction(); 

     myPageFunction.Return += MyPageFunction_Return; 
     frame.Navigate(myPageFunction); 

    } 

    private void MyPageFunction_Return(object sender, ReturnEventArgs<string> e) 
    { 
     // Doesn't get here! 
    } 
} 

PageFunction.xaml

ここ

は、問題を示していくつかのサンプルコードです後ろの210

<PageFunction 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:sys="clr-namespace:System;assembly=mscorlib" 
x:Class="WpfApplication3.MyPageFunction" 
x:TypeArguments="sys:String" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:local="clr-namespace:WpfApplication3" 
mc:Ignorable="d" 
d:DesignHeight="300" d:DesignWidth="300" 
Title="MyPageFunction"> 
<Grid> 
    <Button x:Name="btnReturn" Click="btnReturn_Click" Content="Return"/> 
</Grid></PageFunction> 

PageFunctionコード:

public partial class MyPageFunction : PageFunction<String> 
{ 
    public MyPageFunction() 
    { 
     InitializeComponent(); 
    } 

    private void btnReturn_Click(object sender, RoutedEventArgs e) 
    { 
     // THIS THROWS EXCEPTION! 
     OnReturn(new ReturnEventArgs<string>("return")); 
    } 
} 

答えて

1

ウィンドウがNavigationWindowする必要があり、あなたはNavigationWindowにウィンドウからメインウィンドウの基本型を変更する必要がありますすなわち、および戻りイベントのみ呼び出すページを処理することができはMSDNで文書化されています。https://msdn.microsoft.com/en-us/library/ms602911%28v=vs.110%29.aspx

関連する問題