我有一个Canvas
,上面有Grid
。网格包含3列。第一列包含另一个Grid
,第二列包含任何内容,第三列包含一个图像(一个框)。 (我的动画目的空白栏与此问题无关。)
在我的孩子Grid
我有2行。第一行包含UserControl(框架),第二行包含图像(条形码)。
问题是布局引擎似乎完全忽略了用户控件的尺寸。在预览中,我看到了我的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>
答案 0 :(得分:1)
您的用户控件的ActualHeight
很可能为零。查看用户控件的XAML,您应该只需在用户控件的XAML中设置Height
和Width
。
答案 1 :(得分:0)
我无法确定图像中的UserControl是什么,但如果将属性设置为“已折叠”,则引擎将无法读取我认为不合适的大小。如果UserControl不可见,但您想显示尺寸,请为不透明度属性设置动画,而不是显示性。条形码位于第1行,如果是第2行,它是第一行?
我是否正确假设条形码需要位于带有2行方框的图像下方? UserControl在哪里?它是什么?
答案 2 :(得分:0)
我的问题的答案似乎是将以下代码放在我的UserControl中,但是,我无法想象这是最好的答案,我知道它根本不允许屏幕缩放。所以,如果有人知道怎么做,请告诉我。
感谢Wallstreet Programmer引导我解决这个问题。
Protected Overrides Function MeasureOverride(ByVal availableSize As System.Windows.Size) As System.Windows.Size
Dim bmp As BitmapImage
bmp = BaseImage.Source
Return New Size(bmp.PixelWidth, bmp.PixelHeight)
'Return MyBase.MeasureOverride(availableSize)
End Function