在我的Autodesk Revit插件中,我有一個無模型的WPF視窗在Revit的頂部打開。在該視窗中,我有一個復選框,決定Revit應用程式的選擇模式。每次在復選框上切換模式時,我需要向Revit發送 "ESC "鍵,使其取消當前模式并進入另一種模式(當ESC被發送時,Revit拋出一個例外,我從catch陳述句中遞回呼叫另一種模式)"。
下面是當前的代碼:
< CheckBox IsChecked="{Binding Path=IsMultiselection}" Checked="multiselection_chk_Checked" Unchecked="multiselection_chk_UnChecked">
private void multiselection_chk_Checked(object sender, RoutedEventArgs e)。
{
MultiselectChanged = true;
ActivateRevitWindow()。
System.Windows.Forms.SendKeys.Send("{ESC}"/span>)。
}
private void multiselection_chk_UnChecked(object sender, RoutedEventArgs e)。
{
MultiselectChanged = true;
ActivateRevitWindow()。
System.Windows.Forms.SendKeys.Send("{ESC}"/span>)。
}
public class ViewModel : INotifyPropertyChanged
{
private bool _isMultiselection。
public bool isMultiselection
{
get => _isMultiselection;
set
{
_isMultiselection = value;
OnPropertyChanged();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged( [CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pertyName))。
}
我目前面臨的問題是,盡管選擇模式在Revit中被正確切換,但我的視窗的UI并沒有更新--復選框一直沒有被選中。
我注意到,如果我在System.Windows.Forms.SendKeys.Send("{ESC}");之后放入任何代碼,在我除錯的時候就不會達到,如果我注釋掉這一行,UI就能正常作業,但選擇模式在Revit中不會切換。
有什么想法可以解決這個已經很古怪的解決方案嗎?
uj5u.com熱心網友回復:
最終我用以下代碼替換了System.Windows.Forms.SendKeys.Send("{ESC}");來解決這個問題:
[DllImport("user32.dll"/span>, SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, int Msg, System. Windows.Forms.Keys wParam, IntPtr lParam)。
const int WM_KEYDOWN = 0x0100;
public void PressEsc()
{
PostMessage(RevitWindowHandle, WM_KEYDOWN, System.Windows.Forms.Keys.Escape, IntPtr.Zero)。
靈感來自于這個答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332967.html
標籤:
