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

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 26-10-2016, 16:53:09

Название: Как удалить WPF контрол из палитры?
Отправлено: Дмитрий Загорулькин от 26-10-2016, 16:53:09
Добавляю WPF Control в палитру с помощью метода PaletteSet.AddVisual. Но не нашел никакого способа, чтобы этот контрол удалить из палитры. К тому же, у WPF контрола не нашел каких-то методов, чтобы его можно было уничтожить. Подскажите, можно ли это как-то сделать?
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Дмитрий Загорулькин от 26-10-2016, 18:26:18
Нашел, вроде, способ. PaletteSet.Remove(0). Не знаю, насколько это правильно, но работает.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Александр Ривилис от 26-10-2016, 18:50:14
Дмитрий Загорулькин
PaletteSet.AddVisual возвращает экземпляр класса Palette. Поэтому логичнее наверное воспользоваться не методом PaletteSet.Remove(int index), а PaletteSet.Remove(Palette pal), которой и передавать значение из PaletteSet.AddVisual. Не проверял.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Дмитрий Загорулькин от 26-10-2016, 19:09:55
Судя по всему, предложенный Вами метод доступен, если подключить AdUiPalettes.dll, которую добавили в 2015 версии. Согласен, так логичнее. Но я пока не готов отказаться от поддержки 2014 версии.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Андрей Бушман от 26-10-2016, 21:48:12
Но я пока не готов отказаться от поддержки 2014 версии.
dynamic никто не отменял.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Дмитрий Загорулькин от 26-10-2016, 22:08:23
Вот тут я не понял. А как он мне поможет, если в 2014 нет такого метода?
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Андрей Бушман от 26-10-2016, 22:21:59
Вот тут я не понял. А как он мне поможет, если в 2014 нет такого метода?
Очепятка, 😀. Не dynamic, а reflection. А точнее - InvokeMember. Т.е. в runtime определяет версию акада и через конструкцию if/else дергаешь нужную сигнатуру.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Андрей Бушман от 26-10-2016, 22:32:09
Пример использования функции, способ вызова которой может быть разным в разных версиях акада: http://bushman-andrey.blogspot.ru/2016/08/windows-2.html?m=1
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Александр Ривилис от 26-10-2016, 22:32:19
Вот тут я не понял. А как он мне поможет, если в 2014 нет такого метода?
Очепятка, 😀. Не dynamic, а reflection. А точнее - InvokeMember. Т.е. в runtime определяет версию акада и через конструкцию if/else дергаешь нужную сигнатуру.
А смысл? Если и так работает во всех версиях? Я просто не проверил 2014 версию, бегло глянув документацию для 2017-го.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Дмитрий Загорулькин от 26-10-2016, 23:07:37
Очепятка, 😀. Не dynamic, а reflection. А точнее - InvokeMember. Т.е. в runtime определяет версию акада и через конструкцию if/else дергаешь нужную сигнатуру.
Как верно заметил Александр Наумович, в моем случае в этом нет смысла. Но пример интересный, спасибо! Может быть, в будущем пригодится.
Название: Re: Как удалить WPF контрол из палитры?
Отправлено: Андрей Бушман от 26-10-2016, 23:45:21
А смысл? Если и так работает во всех версиях? Я просто не проверил 2014 версию, бегло глянув документацию для 2017-го.
Ну, если работает во всех версиях, то смысла конечно же нет. Например, смысл есть когда со временем происходит изменение в сигнатуре метода, или конструтора (к примеру).