Canvas
에 Grid
이 있습니다. 그리드에는 3 개의 열이 있습니다. 첫 번째 열은 다른 Grid
을 포함하고 두 번째 열은 아무 것도 포함하지 않으며 세 번째 열은 이미지 (상자)를 포함합니다. (이 질문과 관련없는 애니메이션 목적의 빈 칸이 있습니다.)UserControl Dimensions는 MainPage에서 무시됩니다.
내 자식에 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>
캔버스는 스크린 스케일링을 허용하지 않는다. 그러므로, 지금 제가 찾을 수있는 최선의 대답입니다. 누구든지 더 나은 솔루션을 가지고 있다면 기꺼이 받아들이게되어 기쁘다. – cjbarth