我的问题是我想从一个页面访问放置在窗口中的控件(按钮,文本块,标签或窗口的菜单项......)的属性。页面放在窗口中。我怎样才能做到这一点?是否有任何方法可以在特定窗口或页面或整个应用程序中按名称查找控件?
答案 0 :(得分:1)
Window对象有一个FindName()方法(继承自FrameworkElement)。 MSDN:http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname.aspx
如果我理解正确,那么你需要使用反射来枚举控件的属性。
更新
在XAML中你会有这样的东西:
ListBox o = this.FindName("myListBox") as ListBox;
在窗口的代码中你可以使用:
<Window>
<Grid>
<ListBox x:Name="myListBox" />
</Grid>
</Window>
这个过程中没有“新”。
答案 1 :(得分:1)
我使用Reflection获取了窗口引用:
public static Window WindowByName(string strWindowName)
{
if (string.IsNullOrEmpty(strWindowName)) return null;
Assembly asm = Assembly.GetExecutingAssembly();
string strFullyQualifiedName = asm.GetName().Name + "." + strWindowName;
object obj = asm.CreateInstance(strFullyQualifiedName);
if (obj != null)
return obj as Window;
else
return null;
}
使用上面的方法我检索WinMain.xaml的引用然后通过使用PageRutas.xaml代码后面的FindName方法来解决它的控件,如下所示:
// Retrieve reference WinMain.xaml reference
Window win = cWindow.WindowByName("WinMain");
// Retrieve listbox reference
System.Windows.Controls.ListBox lstbox =
(System.Windows.Controls.ListBox)win.FindName("LayoutListBox");
// Modifying IsEnabled property
lstbox.IsEnabled = false;
但现在......我有另一个问题......执行lstbox.IsEnable = false后,属性变为false;因为WinMain.xaml UI似乎忽略了我所做的更改(在UI中没有禁用列表框),但是发生了一些奇怪的事情。发生了什么?有人可以帮帮我吗?
感谢。
答案 2 :(得分:0)
var mainWindow = Application.Current.MainWindow as MainWindow;
// MainWindow是窗口类型
使用mainWindow.controlName访问控件