C#查找所有WPF窗口
我在Visual studio 2013中有一个C#/WPF项目。该项目包含一个主窗口和几个弹出窗口。 大多数弹出窗口都包含控制元素,包括按钮 我需要找到所有窗口上的所有按钮,或者实际上我需要找到所有按钮的“IsEnabled”属性绑定到了什么。因此,在下面的代码中,我想查找/提取所有按钮的“isChangepwdenable” 下面的代码只是一个窗口和一个按钮的示例,我的解决方案中有30-40个窗口,所有窗口上都有几个按钮 是否有提取此数据的解决方案? 在程序初始化过程中,我尝试过使用LogicalTreeHelper.GetChildren(),但使用该函数,我需要搜索对象的parent,而我没有,因为窗口对象仅在需要时创建 弹出窗口(登录)示例:C#查找所有WPF窗口,c#,wpf,window,C#,Wpf,Window,我在Visual studio 2013中有一个C#/WPF项目。该项目包含一个主窗口和几个弹出窗口。 大多数弹出窗口都包含控制元素,包括按钮 我需要找到所有窗口上的所有按钮,或者实际上我需要找到所有按钮的“IsEnabled”属性绑定到了什么。因此,在下面的代码中,我想查找/提取所有按钮的“isChangepwdenable” 下面的代码只是一个窗口和一个按钮的示例,我的解决方案中有30-40个窗口,所有窗口上都有几个按钮 是否有提取此数据的解决方案? 在程序初始化过程中,我尝试过使用Logi
<window x:Class="ManagedHMI.CLogonDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ManagedHMI"
WindowStyle="ToolWindow"
Topmost="True"
Title="Logon" SizeToContent="WidthAndHeight"
>
<Grid Margin="5,5,5,5" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
...
<Button x:Name="ChangePwd" Width="90" Click="ChangePwd_Click" IsEnabled="{Binding Path=IsChangePwdEnabled, UpdateSourceTrigger=PropertyChanged}">
m_LogonDlg = new CLogonDialog(Logon, UnlockPc, ChangePassword, userDomain, m_language);
在我的程序中,“IsEnabled”属性用于检查用户有权使用哪些按钮,我想使用此功能导出所有按钮的用户权限 您可以使用
Application.Current.Windows
属性来获取对窗口的引用,然后使用下面问题中的FindVisualChildren方法来查找特定窗口中特定类型的所有控件。大概是这样的:
var windows = Application.Current.Windows;
foreach(var window in windows)
{
var buttons = FindVisualChildren<Buttons>(window);
if(buttons != null)
{
foreach(var button in buttons)
{
bool isEnabled = buttons.IsEnabled;
//...
}
}
}
var-windows=Application.Current.windows;
foreach(windows中的var窗口)
{
var按钮=FindVisualChildren(窗口);
如果(按钮!=null)
{
foreach(按钮中的var按钮)
{
bool isEnabled=按钮。isEnabled;
//...
}
}
}
请注意,在IsEnabled绑定上设置
UpdateSourceTrigger=PropertyChanged
是没有意义的。绑定是单向的,因此从不更新其源。问题是,Application.Current.Windows
只获取当前(运行时)活动窗口的列表,我需要解决方案中所有窗口的列表,以便当前未活动(或创建)的窗口但是可能会在程序执行的后期创建。如何获取对尚未创建的窗口的引用?这确实是不可能的,因为在构建窗口之前没有参考。。。