WPF 无模式表单专注于孩子

问题描述

谁能给我一个提示,在我们说 PickObject 命令之后如何让我的 WPF 窗口再次处于活动状态?

xaml_source = "UI.xaml"
class ModelessForm(WPFWindow):
    
    def __init__(self,xaml_source,literal_string=False,handle_esc=True,set_owner=True):
        """Initialize WPF window and resources."""
        # load xaml
        self.load_xaml(
            xaml_source,literal_string=literal_string,handle_esc=handle_esc,set_owner=set_owner
            )
        self.datagrid.ItemsSource = data_grid_content
        self.Show()
        
    def load_xaml(self,set_owner=True):
        # create new id for this window
        self.window_id = coreutils.new_uuid()

        if not literal_string:
            if not op.exists(xaml_source):
                wpf.LoadComponent(self,os.path.join(EXEC_ParaMS.command_path,xaml_source))
            else:
                wpf.LoadComponent(self,xaml_source)
        else:
            wpf.LoadComponent(self,framework.StringReader(xaml_source))

        # set properties
        self.thread_id = framework.get_current_thread_id()
        if set_owner:
            self.setup_owner()
        self.setup_icon()
        WPFWindow.setup_resources(self)
        if handle_esc:
            self.setup_default_handlers()
            
    def setup_owner(self):
        wih = Interop.WindowInteropHelper(self)
        wih.Owner = AdWindows.ComponentManager.applicationwindow
        
    def on_enter(self,sender,e):
        if e.Key == Input.Key.Enter:
            self.pickElementClick
            # wih = Interop.WindowInteropHelper(self)
            
            # wih.Owner = AdWindows.ComponentManager.applicationwindow
            # print (wih.Owner)
            # # wih.Owner = self.uiapp.MainWindowHandle
            # # print (AdWindows.ComponentManager.applicationwindow)
            # hwnd_source = Interop.HwndSource.FromHwnd(HOST_APP.proc_window)
            # # print (hwnd_source)
            # root_visual = hwnd_source.RootVisual
            # print (root_visual)
            # Common.User32.SetForegroundWindow( IntPtr(AdWindows.ComponentManager.applicationwindow))
            
            # uiapp=HOST_APP.uiapp
            # wndHndle = uiapp.MainWindowHandle
            # print (wndHndle)
            # # print ('/n')
            # wih = Interop.WindowInteropHelper(self)
            # # print (wih)
            # # wih.Owner = AdWindows.ComponentManager.applicationwindow
            # print (wih.Owner)
            #SetwindowLongPtr(wih,-8,wndHndle)

为了选择元素,我使用了 pyRevitMEP 中的 custom_event,它要求用户一个一个地选择两个元素。

或多或少是这样的。


el_ref1 = uidoc.Selection.PickObject(
        ObjectType.LinkedElement,"Select element in linked Revit model")

el_ref2 = uidoc.Selection.PickObject(
        ObjectType.Element,"Select element in current Revit model")

#HANDLER in class ModelessForm(WPFWindow):
def pickElementClick(self,e):
        try:
            customizable_event.raise_event(
                pick_elements,_parameterSet_global_1,_parameterSet_global_2
            )
            
        except:
            pass
        
        self.datagrid.Items.Refresh()

选择完成后,除了我的 WPF 窗口处于非活动状态之外,一切都像魅力一样。 我显然可以点击它并激活 - 没问题,但目标是使用 on_enter 事件处理程序再次点击 Enter 和启动命令

def on_enter(self,e):
    if e.Key == Input.Key.Enter:
        self.pickElementClick

这让我只需按 Enter 键并进行新选择。

def on_enter(self,e): 中有很多未使用的代码。我尝试了很多东西,但不幸的是失败了 :D

干杯!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)