我正在使用.net Compact Framework 3.5开发一个Windows移动应用程序框架,并且有一个包含基本自定义控件的BaseControls项目。其中一个控件是“TransparentLabel”。由于.net CF消除了很多设计时属性的功能,我必须使用DesignTimeAttributes.xmta文件来指定我的控件属性的默认值。
为我的控件设置默认大小时出现问题。以我的TransparentLabel为例。我使用以下方法设置默认值:
<?xml version="1.0" encoding="utf-16"?>
<Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd">
<Class Name="BaseControls.TransparentLabel">
<DesktopCompatible>true</DesktopCompatible>
<ApplyDeviceDefaults>
<PropertyName>Size</PropertyName>
<ApplyDefaults>false</ApplyDefaults>
</ApplyDeviceDefaults>
<Property Name="Size">
<DefaultValue>
<Type>System.Drawing.Size, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Type>
<Value>110, 20</Value>
</DefaultValue>
</Property>
</Class>
<Class Name="BaseControls.TransparentControlBase">
<DesktopCompatible>true</DesktopCompatible>
</Class>
</Classes>
但是,当我将TransparentLabel实例拖放到窗体上时,Size会加倍(即220x40)。我认为这与我正在开发VGA设备框架的事实有关,这个设备的分辨率是QVGA设备的两倍,但我不知道如何阻止它。我已经尝试将目标表单上的AutoScaleMode属性设置为Dpi和None,这没有任何效果。现在我意识到我可以将默认值设置为我实际想要的一半,并且它将缩放到所需的大小,但我想了解是什么导致了这个以及如何阻止它。
提前多多谢谢!
修改 以下代码显示将TransparentLabel从工具箱拖到窗体上时窗体的设计器文件中生成的代码。正如您所看到的,Size是我在Design Time属性文件中指定的两倍。
//
// transparentLabel1
//
this.transparentLabel1.Location = new System.Drawing.Point(100, 178);
this.transparentLabel1.Name = "transparentLabel1";
this.transparentLabel1.Size = new System.Drawing.Size(220, 40);
this.transparentLabel1.TabIndex = 17;
this.transparentLabel1.Text = "transparentLabel1";
this.transparentLabel1.TextAlign = System.Drawing.ContentAlignment.TopLeft;