- AutoCAD 2009 x86 SP3 Enu
- Windows XP x86 SP3 Rus
Палитра инструментов изначально открывается не в том виде (позиция\размеры\свойства), который мною назначался в коде:
/// <summary>
/// This command displays the "Sheet Set Viewer" palette.
/// </summary>
[Rtm.CommandMethod(ns, "ss-viewer", Rtm.CommandFlags.Session)]
public void OpenSheetSetViewer() {
// Create the new palette set
Win.PaletteSet palette_set = new Win.PaletteSet(
"Sheet Set Viewer");
ElementHost host = new ElementHost();
host.AutoSize = true;
host.Dock = DockStyle.Fill;
// Host my WPF control
SheetSetViewer control = new SheetSetViewer();
// Save the link to the custom control
control.tree.Tag = control;
control.props.Tag = control;
host.Child = control;
// Create the new tab in the palette set
Win.Palette palette = palette_set.Add("Sheet set's tree", host);
GetOpenedSheetSets(control); // Fill the combo box (sheet sets list)
// Update the info, when other sheet set was selected from the combo box.
control.cboSheetSets.SelectionChanged += new WPF.SelectionChangedEventHandler(
cboSheetSets_SelectionChanged);
// Update the property's info, when other item was selected in the sheet set tree.
control.tree.SelectedItemChanged += new System.Windows
.RoutedPropertyChangedEventHandler<object>(tree_SelectedItemChanged);
palette_set.Style = Win.PaletteSetStyles.ShowCloseButton |
Win.PaletteSetStyles.ShowPropertiesMenu |
Win.PaletteSetStyles.ShowAutoHideButton;
palette_set.Size = new Size(400, 600);
// Position of top left corner of palette
palette_set.Location = new Point(400, 400);
// Let the palette set can be docked only to left\right by the user
palette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;
// Uncheck the "Allow Docking" (as I expect).
palette_set.Dock = Win.DockSides.None;
// Display the palette set
palette_set.KeepFocus = true;
palette_set.Visible = true;
}
Однако при вызове команды
ss-viewer палитра открывается в виде, показанном ниже файлом 0.png. Если я вручную оттаскиваю палитру от края и открываю её свойства, то вижу, что опция прикрепления включена, хотя я её отключал в коде, а так же прописывал координаты левого верхнего угла палитры (см. второе изображение: 1.png).
Если я поменяю местами два фрагмента кода:
// Display the palette set
palette_set.KeepFocus = true;
palette_set.Visible = true;
palette_set.Style = Win.PaletteSetStyles.ShowCloseButton |
Win.PaletteSetStyles.ShowPropertiesMenu |
Win.PaletteSetStyles.ShowAutoHideButton;
palette_set.Size = new Size(400, 600);
// Position of top left corner of palette
palette_set.Location = new Point(400, 400);
// Let the palette set can be docked only to left\right by the user
palette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;
// Uncheck the "Allow Docking" (as I expect).
palette_set.Dock = Win.DockSides.None;
т. е. сначала отображаю палитру и только после этого начинаю править её настройки, то она открывается не прикреплённой, а так, как показано на скрине 2.png. Причём изначально палитра открывается прикреплённой к левому краю, но через долю секунды отлипает и занимает ту позицию, которая показана. При этом на самом деле позиция и размеры палитры не те, которые я указывал в коде. Однако и это ещё не всё...
Если сначала изменить свойство Dock, а потом менять остальные:
// Display the palette set
palette_set.KeepFocus = true;
palette_set.Visible = true;
// Uncheck the "Allow Docking" (as I expect).
palette_set.Dock = Win.DockSides.None;
palette_set.Style = Win.PaletteSetStyles.ShowCloseButton |
Win.PaletteSetStyles.ShowPropertiesMenu |
Win.PaletteSetStyles.ShowAutoHideButton;
palette_set.Size = new Size(400, 600);
// Position of top left corner of palette
palette_set.Location = new Point(400, 400);
// Let the palette set can be docked only to left\right by the user
palette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;
то в этом случае палитра открывается так, как показано на 4.png. Обратите внимание на позицию и размеры палитры - в этот раз они правильные, как я и задавал в коде.
Но и это ещё не всё!
// Uncheck the "Allow Docking" (as I expect).
palette_set.Dock = Win.DockSides.None;
// Display the palette set
palette_set.KeepFocus = true;
palette_set.Visible = true;
palette_set.Style = Win.PaletteSetStyles.ShowCloseButton |
Win.PaletteSetStyles.ShowPropertiesMenu |
Win.PaletteSetStyles.ShowAutoHideButton;
palette_set.Size = new Size(400, 600);
// Position of top left corner of palette
palette_set.Location = new Point(400, 400);
// Let the palette set can be docked only to left\right by the user
palette_set.DockEnabled = Win.DockSides.Left | Win.DockSides.Right;
При таком порядке редактирования свойств палитра вообще не появляется! Безобразный результат выглядит так, как показано в файле 5.png.
В моём понимании, поведение палитры не должно отличаться при перестановке местами обозначенных мною строк кода.
Почему так происходит? Предполагаю, что это баг, поскольку конечный результат, в виде состояния объекта, не должен зависеть от порядка изменения его свойств.
Спасибо.