Освобождение пространства из части поля данных DescriptionViewer в DataForm Silverlight Toolkit

Часть DescriptionViewer поля DataField используется для отображения свойства Description System.ComponentModel. DisplayAttribute как Всплывающая подсказка в сгенерированном виде. Я не хочу использовать эту возможность, и хотя я могу убедиться, что элемент пользовательского интерфейса не отображается, используя стиль, чтобы установить для DescriptionViewerVisibility значение Collapsed, либо установив параметр DescriptionViewerStyle должен иметь значение NULL, как показано ниже, в макете DataField все еще есть место для этого элемента.

<Style x:Key="DataFieldStyle1" TargetType="dataFormToolkit:DataField">
    <Setter Property="DescriptionViewerVisibility" Value="Collapsed"/>
    <Setter Property="DescriptionViewerStyle" Value="{x:Null}" />
</Style>

В моем сценарии это пространство - пустая трата времени, и я хочу от него избавиться. Я ожидал, что этот макет будет отображаться свойством DataField.Template, но когда я использую Blend для редактирования копии шаблона по умолчанию, макета там нет.

Я использую System.Windows.Controls.Data. DataForm.Toolkit, Version = 2.0.5.0 из выпуска Silverlight Toolkit октябрь 2009 г. в составе служб WCF RIA. Проект бета-версии бизнес-приложения Silverlight 3. Я использую Visual Studio 2008 SP1. Я знаю, что есть выпуск за ноябрь 2009 г., но я не вижу упоминания об этом изменении в примечаниях к выпуску.


person Martin Hollingsworth    schedule 03.12.2009    source источник


Ответы (2)


Альтернативным решением является использование метки DataForm и элемента управления для отображения вашего поля.

Вместо использования такого поля DataField и, в конечном итоге, наличия места для DescriptionViewer

<dataControls:DataField>
    <TextBox Text="{Binding FirstName, Mode=TwoWay}" />
</dataControls:DataField>

Вы можете использовать этот код, и у вас не будет DescriptionViewer.

<dataInput:Label Target="{Binding ElementName=tbFirstName}" />
<TextBox x:Name="tbFirstName" Text="{Binding FirstName, Mode=TwoWay}" />

С этим решением вы потеряете сгенерированный макет, который поставляется с DataForm, но вы можете легко сделать это с помощью простой сетки.

person Zied    schedule 04.12.2009
comment
Это звучит как хорошая идея. Предоставляет ли DataField какое-либо другое значение, помимо добавления Label и DescriptionViewer, которое я потеряю и мне нужно будет реализовать себя? Я ожидал, что будет какое-то поведение проверки, которое реализуется элементом управления DataField. - person Martin Hollingsworth; 04.12.2009
comment
Это решение также требует, чтобы вы реализовали визуальный элемент и поведение для других атрибутов DataAnnotation, таких как ReadOnly и Required. - person Martin Hollingsworth; 04.12.2009
comment
Обязательная аннотация DataAnnotation работает. Для ReadOnly я еще не тестировал. Другие данные DataAnnotation тоже работают, например, как Display. - person Zied; 05.12.2009

Используя Reflector, я вижу, что метод DataField.OnApplyTemplate вызывает частный метод под названием GenerateUI, который использует обычный код для создания сетки со столбцом для DescriptionViewer, и я могу Я не вижу способа предотвратить это, не взламывая .NET clr на очень низком уровне, что было бы неуместно. Я что-то упустил?

Я начинаю приходить к выводу, что вам либо нужно придерживаться очень близкого к поведению по умолчанию этих элементов управления Silverlight Toolkit, если вы хотите извлечь выгоду из предполагаемого прироста производительности. Все, что угодно, кроме довольно тривиальной настройки, на данный момент кажется незаконченным.

person Martin Hollingsworth    schedule 03.12.2009