问题描述
谁能给我一个提示,在我们说 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 (将#修改为@)