WPF Rectangle vs Border: что лучше для производительности?

Бывают моменты, когда либо контроль границы, либо контроль прямоугольника удовлетворят мою потребность. Примером может служить ситуация, когда я реализую ControlTemplate и уже применяю технику наложения (т. Е. Накладываем элементы управления в сетке), и мне не нужны разные RadiusX или RadiusY, применяемые к углам.

Однако при разработке таких ControlTemplates иногда я в конечном итоге использую несколько таких слоев либо Borders, либо Rectangles. Таким образом, я понял, что, вероятно, должен знать, какой элемент управления окажет наименьшее влияние на производительность приложения. Я вижу, что их иерархия наследования расходится после FrameworkElement. И я также заметил, что Border - это элемент управления Decorator (я работал с Decorators, но я не уверен, как они работают относительно других элементов управления). Может кто-то пролить свет на

1) Как мы можем сделать некоторые общие выводы о влиянии элемента управления на производительность на основе конкретной иерархии наследования?

2) Как декораторы, такие как Border, работают относительно других элементов управления?

3) В частности, что касается границ и прямоугольников, что работает лучше?

1 ответ

По моему опыту, границы WPF немного легче, но, что более важно, они представляют собой несколько иную потребность, хотя они часто отображаются одинаково на вашем экране. Если я сочиняю что-то, что включает в себя прямоугольники как часть того, что есть, то прямоугольник обычно является тем, что уместно. Если я хочу подчеркнуть что-то на экране или указать, что объект имеет какое-то другое состояние - тогда я буду использовать границу. Я часто привязываю цвет, толщину или видимость этой границы к свойству состояния модели (или к тому, что применимо в вашем случае), но существенное отличие состоит в том, что граница не является частью объекта. Это способ просто выделить этот объект или быть видимым.

Или, если это уже составленная вещь, такая как TextBox, и я добавляю вокруг нее немного цвета - это обычно будет граница.

Помня об этом различии, оно помогает лучше понять ваше дерево XAML и дает вам код, который легче поддерживать позже.

Другие вопросы по тегам