Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#查找所有WPF窗口_C#_Wpf_Window - Fatal编程技术网

C#查找所有WPF窗口

C#查找所有WPF窗口,c#,wpf,window,C#,Wpf,Window,我在Visual studio 2013中有一个C#/WPF项目。该项目包含一个主窗口和几个弹出窗口。 大多数弹出窗口都包含控制元素,包括按钮 我需要找到所有窗口上的所有按钮,或者实际上我需要找到所有按钮的“IsEnabled”属性绑定到了什么。因此,在下面的代码中,我想查找/提取所有按钮的“isChangepwdenable” 下面的代码只是一个窗口和一个按钮的示例,我的解决方案中有30-40个窗口,所有窗口上都有几个按钮 是否有提取此数据的解决方案? 在程序初始化过程中,我尝试过使用Logi

我在Visual studio 2013中有一个C#/WPF项目。该项目包含一个主窗口和几个弹出窗口。 大多数弹出窗口都包含控制元素,包括按钮

我需要找到所有窗口上的所有按钮,或者实际上我需要找到所有按钮的“IsEnabled”属性绑定到了什么。因此,在下面的代码中,我想查找/提取所有按钮的“isChangepwdenable”

下面的代码只是一个窗口和一个按钮的示例,我的解决方案中有30-40个窗口,所有窗口上都有几个按钮

是否有提取此数据的解决方案? 在程序初始化过程中,我尝试过使用LogicalTreeHelper.GetChildren(),但使用该函数,我需要搜索对象的parent,而我没有,因为窗口对象仅在需要时创建

弹出窗口(登录)示例:

<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
只获取当前(运行时)活动窗口的列表,我需要解决方案中所有窗口的列表,以便当前未活动(或创建)的窗口但是可能会在程序执行的后期创建。如何获取对尚未创建的窗口的引用?这确实是不可能的,因为在构建窗口之前没有参考。。。