Ширина DockablePane

Автор Тема: Ширина DockablePane  (Прочитано 227 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн KisliАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Ширина DockablePane
« : 10-11-2018, 20:55:08 »
Всем доброго времени суток, есть ли какая-то возможность регулировать ширину закрепленной DockablePane?

Оффлайн Александр Игнатович

  • Administrator
  • ****
  • Сообщений: 322
  • Карма: 104
  • Skype: alexandr.ignatovich.itc
Re: Ширина DockablePane
« Ответ #1 : 10-11-2018, 23:36:52 »
На вскидку - нет, пробовал в свое время в разметке MaxWidth указывать, так просто по краям черные полосы появляются. В понедельник попробую поковыряться дополнительно, может найдется какое решение.

Оффлайн KisliАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Ширина DockablePane
« Ответ #2 : 11-11-2018, 14:22:45 »
Буду благодарен если что-то найдете. Я пока поэкспериментировал. У плавающей панели это можно задать, и если её потом закрепить (в ручную) то ширина будет заданная. Если возможность это сделать вне метода SetupDockablePane?

Оффлайн Александр Игнатович

  • Administrator
  • ****
  • Сообщений: 322
  • Карма: 104
  • Skype: alexandr.ignatovich.itc
Re: Ширина DockablePane
« Ответ #3 : 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, но тоже ничего толкового не нашёл :-(