2014-06-29 5 views
-1

Я рассмотрел различные примеры и прочитал о прикрепленных свойствах. Однако мне все еще не ясно, почему они нужны или лучше. Посмотрите на этот пример:Почему добавленные свойства были добавлены в XAML?

<DockPanel> <CheckBox DockPanel.Dock="Top">Hello</CheckBox> </DockPanel>

DockPanel.Dock является вложенное свойство, и это понятно, что имеется в виду: не очень элемент должен иметь или необходимость индивидуальной собственности, которая позволила бы определить его поведение док. То же самое относится к определениям строк и столбцов сетки. Но почему бы не выразить такие вещи, как это вместо:

<DockPanel> <Docked Location="Top"> <CheckBox>Hello</CheckBox> </Docked> </DockPanel>

Похожие было бы возможно для сеток с строк и столбцов тегов.

Было ли это чистое дизайнерское решение или есть другие причины, которые делают прикрепленные свойства лучшим или единственным решением?

+0

Мне нравится, если вопросы опускаются, проголосовали без комментариев ... как я могу улучшить его, если не знаю, что в этом плохого. – Krumelur

ответ

2

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

Предположим, например, что вы хотите, чтобы отметить не только одного вложенного свойства следующим образом:

<DockPanel> 
    <CheckBox DockPanel.Dock="Top" TextBlock.FontSize="16">Hello</CheckBox> 
</DockPanel> 

Как грязный бы эквивалент «инкапсулированный» путь?

Я бы добавил еще одну точку зрения, несмотря на то, что это всего лишь mine. Нотация XAML часто обозначает структуру объектов: элемент представляет класс (экземпляр), тогда как атрибут - свойство. Ваш шаблон будет бороться с возможностью установки свойства следующим образом:

<DockPanel> 
    <DockPanel.RenderTransform> 
    <ScaleTransform ScaleX="2" ScaleY=3" /> 
    </DockPanel.RenderTransform> 
</DockPanel> 

Это конкретный шаблон элемента, который обозначает альтернативный способ определить свойство (например, RenderTransform) содержание (т.е. фактического преобразования экземпляра).

ОБНОВЛЕНИЕ: Я также добавил бы еще одну вещь о , что следует вставить как дочерний элемент определенного контейнера (DockPanel в вашем примере). «Docked» должен быть фактическим ребенком или просто виртуальным контейнером, который не является частью дерева визуальных/логических данных? Затем, если вы идете вверх по визуально/логическому дереву, вы должны найти этот элемент или нет? Если нет, то каким образом вы должны получить значение «Docked»?

Теперь я не уверен, удовлетворяет ли мой ответ, но ... не стесняйтесь уточнять, что вам не нравится в шаблоне прикрепленных свойств, и, возможно, вы достигнете точки!

+0

Я «как» приложенные свойства и ваш пример с двумя разными свойствами действительно объясняют, почему они полезны. Я полностью пропустил это! – Krumelur

Смежные вопросы