从Silverlight Toolkit DataForm上的DataField的DescriptionViewer部分回收空间

时间:2009-12-03 23:15:42

标签: silverlight wcf-ria-services silverlight-toolkit dataform

DataField DescriptionViewer 部分用于显示System.ComponentModel的描述属性。 DisplayAttribute 作为生成表单中的工具提示。我不想使用此功能,虽然我可以通过使用样式将 DescriptionViewerVisibility 设置为折叠或通过设置来确保UI元素不可见 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编辑默认模板的副本时,布局就不存在了。

我正在使用Silverlight Toolkit的 2009年10月版本中的System.Windows.Controls.Data。 DataForm.Toolkit,Version = 2.0.5.0 WCF RIA Services Beta业务应用程序Silverlight 3项目。我正在使用Visual Studio 2008 SP1。我知道有一个2009年11月的版本,但我在发行说明中没有看到任何关于这种变化的提及。

2 个答案:

答案 0 :(得分:1)

另一种解决方案是使用DataForm Label和控件来显示您的字段。

而不是像这样使用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附带的生成布局,但您可以使用简单的网格轻松完成

答案 1 :(得分:0)

使用Reflector我可以看到 DataField.OnApplyTemplate 方法调用一个名为 GenerateUI 的私有方法,该方法使用传统代码创建一个带有DescriptionViewer列的Grid,我没有办法防止这种情况,如果不做一些非常低级的.NET clr那种不合适的黑客攻击。我在这里错过了什么吗?

我开始得出的结论是,如果您希望从所谓的生产力增益中受益,您需要非常接近这些Silverlight Toolkit控件的默认行为。现在看来,任何更加琐碎的定制似乎都是一个不完整的故事。