在父窗口中调用控件

时间:2012-07-24 00:26:16

标签: c# wpf

之前我使用过vb.net,想要探索c#。 (他们说c#比vb.net好)但是无论如何......我在vb.net中使用下面的代码调用父窗口中的控件。

Dim strWindowToLookFor As String = GetType(MainWindowForm).Name
Me.Close()
Dim win = (From w In Application.Current.Windows Where DirectCast(w, Window).GetType.Name = strWindowToLookFor Select w).FirstOrDefault
If win IsNot Nothing Then
    DirectCast(win, MainWindowForm).imglogin.Visibility = Windows.Visibility.Visible
    DirectCast(win, MainWindowForm).Focus()
End If

我之前在其他论坛找到了这段代码并在vb.net中帮了我很多...但是现在我想在c#中使用这段代码来调用控件...所以我用SharpDevelop转换它(很好软件)....

        string strWindowToLookFor = typeof(MainWindowForm).Name;
        this.Close();
        var win = (from w in Application.Current.Windowswhere ((Window)w).GetType().Name == strWindowToLookForw).FirstOrDefault;
        if (win != null) {
            ((MainWindowForm)win).imglogin.Visibility = System.Windows.Visibility.Visible;
            ((MainWindowForm)win).Focus();
        }

问题是它给了我一个错误:

错误1无法找到源类型“System.Windows.WindowCollection”的查询模式的实现。 '哪里'找不到。考虑明确指定范围变量'w'的类型。

错误#1突出显示了Application.Current.Windows。

错误2查询正文必须以select子句或组子句结束

2 个答案:

答案 0 :(得分:1)

我认为你真的不需要在这里使用反射。你可以尝试一些更简单的东西:

var mainWindow = Application.Current.Windows.OfType<MainWindowForm>()
                                            .FirstOrDefault();

if (mainWindow != null)
{
   //Visibility stuff goes here
}

答案 1 :(得分:0)

from w in Application.Current.Windowswhere

from w in Application.Current.Windows where



var win = (from w in Application.Current.Windows where ((Window)w).GetType().Name == strWindowToLookForw select w).FirstOrDefault()

编辑:上面应该是完全修改的行。添加了“where”条件的空间并添加了“select”语句。

谨慎提醒:工具和样本旨在帮助理解,它们不能替代它。请务必阅读并理解您遇到的样本以及工具生成/转换。

而且C#并不比VB.Net“更好”,它在同一平台上是一种不同的语言。当然,很多人会认为它更好。 :)