Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Kisli от 10-11-2018, 20:55:08

Название: Ширина DockablePane
Отправлено: Kisli от 10-11-2018, 20:55:08
Всем доброго времени суток, есть ли какая-то возможность регулировать ширину закрепленной DockablePane?
Название: Re: Ширина DockablePane
Отправлено: Александр Игнатович от 10-11-2018, 23:36:52
На вскидку - нет, пробовал в свое время в разметке MaxWidth указывать, так просто по краям черные полосы появляются. В понедельник попробую поковыряться дополнительно, может найдется какое решение.
Название: Re: Ширина DockablePane
Отправлено: Kisli от 11-11-2018, 14:22:45
Буду благодарен если что-то найдете. Я пока поэкспериментировал. У плавающей панели это можно задать, и если её потом закрепить (в ручную) то ширина будет заданная. Если возможность это сделать вне метода SetupDockablePane?
Название: Re: Ширина DockablePane
Отправлено: Александр Игнатович от 14-11-2018, 17:01:35
Нет, к сожалению, не получилось. с помощью SetupDockablePane можно задать только изначальные параметры, затем всё это изменяется динамически и Revit сохраняет эти данные даже между перезапусками. Официального способа управлять у нас нет, но чисто теоретически можно попробовать с помощью WinAPI, правда, у меня не получилось.

В самом UserControl получал hwnd:
Код - C# [Выбрать]
  1. var hwndSource = (HwndSource)PresentationSource.FromVisual(this);

Дальше с помощью
Код - C# [Выбрать]
  1. [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
  2. private static extern IntPtr GetParent(IntPtr hWnd);

добирался до Docking View (Закрепленный вид):
Код - C# [Выбрать]
  1. return GetParent(GetParent(GetParent(hwndSource.Handle)));

Здесь можно поисследовать с помощью утилиты Microsoft Spy++, её можно поставить вместе с Visual Studio

Успешно получал его размеры:

Код - C# [Выбрать]
  1. [DllImport("user32.dll")]
  2. private static extern long GetWindowRect(IntPtr hWnd, ref Rectangle lpRect);

Дальше пытался с помощью:
Код - C# [Выбрать]
  1. [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
  2. private static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
  3.  
  4.  
  5. const short SWP_NOMOVE = 0X2;
  6. const short SWP_NOSIZE = 1;
  7. const short SWP_NOZORDER = 0X4;
  8. const int SWP_SHOWWINDOW = 0x0040;
  9.  

пытался поменять ширину
Код - C# [Выбрать]
  1. SetWindowPos(hWnd, IntPtr.Zero, rect.X, rect.Y, rect.Width + 50, rect.Height, SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW);

но без особого эффекта.

Еще поковырял AdWindows и PresentationFramework, но тоже ничего толкового не нашёл :-(
Название: Re: Ширина DockablePane
Отправлено: Kisli от 19-11-2018, 14:26:16
Очень жаль. Огромное вам спасибо за проведенные изучения этого вопроса!