【发布时间】:2011-04-05 20:59:55
【问题描述】:
我有一个Canvas,上面有一个Grid。网格包含 3 列。第一列包含另一个Grid,第二列不包含任何内容,第三列包含一个图像(一个框)。 (我有与这个问题无关的动画目的的空白列。)
在我的孩子Grid 我有 2 行。第一行包含一个 UserControl(框的架子),第二行包含一个 Image(条形码)。
问题在于布局引擎似乎完全忽略了用户控件的尺寸。在预览中,我看到了我的 UserControl 和其他两个图像。授予 Canvas 不会自动调整其子项的大小,但我通过页面的 SizeChanged 事件中的一些调整大小语句解决了这个问题。
事实上,该框在运行时显示在我的窗口的右下角,但条形码的位置好像 UserControl 不存在。
有关我的问题的说明,请参阅http://www.wynright.com/temp/Problem.png
以下是我的 XAML 代码:
<Canvas x:Name="MainCanvas" Background="Silver">
<Grid Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid Name="LayoutChild" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<LightPickDemo:Picker x:Name="PickZone" ZoneCleared="PickZone_ZoneCleared" HorizontalAlignment="Left" VerticalAlignment="Top" />
<Image Name="BarCode" Source="/LightPickDemo;component/Images/BarcodeScan.png" HorizontalAlignment="Center" Stretch="None" VerticalAlignment="Center" Grid.Row="1" />
</Grid>
<Image Name="imgShippingBox" Source="/LightPickDemo;component/Images/Empty-Box.png" VerticalAlignment="Bottom" Stretch="None" Grid.Column="2" />
</Grid>
</Canvas>
所以我想知道我需要做什么才能让 UserControl 为布局引擎提供其大小。我可以在我的设计器中看到控件的大小,因此编译器清楚地知道该控件有大小。
我希望条形码在 UserControl 下方居中显示。
这是 UserControl 的 XAML:
<Canvas>
<Image Name="ImageBase" Source="/LightPickDemo;component/Images/BayShelves.png" />
<LightPickDemo:ZoneLight x:Name="ZoneLight" Canvas.Left="345" Canvas.Top="0" ButtonPress="ZoneLight_ButtonPress" />
<LightPickDemo:PickerModule x:Name="pickerCalculator" Canvas.Left="74" Canvas.Top="266" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerCalendar" Canvas.Left="207" Canvas.Top="266" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerPaperClip" Canvas.Left="521" Canvas.Top="266" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerRuler" Canvas.Left="649" Canvas.Top="266" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerScissor" Canvas.Left="75" Canvas.Top="532" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerStapler" Canvas.Left="250" Canvas.Top="532" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerStapleRemover" Canvas.Left="435" Canvas.Top="532" OnPicked="Picker_PickChanged" />
<LightPickDemo:PickerModule x:Name="pickerTapeDispenser" Canvas.Left="635" Canvas.Top="532" OnPicked="Picker_PickChanged" />
</Canvas>
【问题讨论】:
标签: wpf silverlight-4.0 wpf-controls grid