前提として、Window1のGrid内に、UserControl1とUserControl2があるものとします。この時、UserControl1からUserControl2の参照を得るにはどのようにすれば良いでしょうか? いくつかのパターンを以下にします。
//パターン1
Window1 mw = (Window1)((Grid)this.Parent).Parent;
//パターン2
Window1 mw = (Window1)Application.Current.MainWindow;
//パターン3
var window = Application.Current.Windows.OfType<Window>().FirstOrDefault(w => w is Window1);
Window1 mw = (Window1)window;
/*以下ではWindow1のNameプロパティにWindow1Nameを設定する必要がある。
* Window1というクラスと同じ名前は設定できない。
* これはNameプロパティと同じ名前のフィールドがそのクラスに自動的に作成されるためである。
*/
//パターン4
var window = from w in Application.Current.Windows.OfType<Window>()
where w.Name == "Window1Name"
select w;
Window1 mw = (Window1)window.FirstOrDefault<Window>();
//パターン5
var window = from Window1 w in Application.Current.Windows.OfType<Window>()
where w.Name == "Window1Name"
select w;
Window1 mw = window.FirstOrDefault<Window1>();
こうやってWindow1の参照であるmwが得られたので、あとはmw.UserControl2とすれば、UserControl2の参照が得られます。