0

この単純なコードで表示されている子ウィンドウを検索したいのですが、ウィンドウが見つからないというメッセージが表示され続けます。メインウィンドウで表示されている子ウィンドウを検索することについて誰でも考えられますか?

コードは次のとおりです。

private HomeWindow NewHomeWindow = new HomeWindow();
string ReturnWindowName;
private void btnhome_Click(object sender, RoutedEventArgs e)
{
    ReturnWindowName = "NewHomeWindow";
    NewHomeWindow.Owner = this;
    NewHomeWindow.Show();
}

private void btnsearchwindow_Click(object sender, RoutedEventArgs e)
{
    ChangeWindow();
}

public void ChangeWindow()
{
    Window mySearchWindow = (Window)this.FindName(ReturnWindowName);

    if (mySearchWindow != null)
    {
        MessageBox.Show("Window Found");
    }
    else
    {
        MessageBox.Show("Window Not Found");
    }
}
4

2 に答える 2

0

私はあなたの質問に完全には確信が持てませんが、コントロールの視覚的な子を見つけたいと思っていると思いますか?

これは私が頻繁に使用するヘルパー関数です..

public IEnumerable<T> FindVisualChildren<T>( DependencyObject depObj ) where T : DependencyObject
        {
           if( depObj != null )
           {
              for( int i = 0; i < VisualTreeHelper.GetChildrenCount( depObj ); i++ )
              {
                 DependencyObject child = VisualTreeHelper.GetChild( depObj, i );
                 if( child != null && child is T )
                 {
                    yield return (T)child;
                 }

                 foreach( T childOfChild in FindVisualChildren<T>( child ) )
                 {
                    yield return childOfChild;
                 }
              }
           }
        }

あなたの例では、ウィンドウを探します:

foreach (var window in FindVisualChildren<Window>(this))
{
  if (window.ReturnWindowName == <insertNameHere>)
     return window;
}

そこから、見つかったウィンドウをループして名前を一致させることができます。

于 2012-08-03T03:11:03.930 に答える