Размеры UserControl, игнорируемые в макете MainPage - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть Canvas с Grid на нем.Сетка содержит 3 столбца.Первый столбец содержит еще один Grid, второй ничего не содержит, третий содержит изображение (поле).(У меня есть пустой столбец для анимации, не связанный с этим вопросом.)

У моего ребенка Grid У меня есть 2 строки.Первая строка содержит UserControl (полки с полками), вторая содержит изображение (штрих-код).

Проблема в том, что механизм компоновки, похоже, полностью игнорирует размеры пользовательского элемента управления.В предварительном просмотре я вижу свой UserControl и прямо поверх него два других изображения.Предоставленный Canvas автоматически не измеряет его дочерние элементы, но я разрешил это с помощью некоторых операторов изменения размера в событии SizeChanged страницы.

В действительности, поле отображается во время выполнения в нижней части.в правом углу моего окна, как и должно быть, однако штрих-код выглядит так, как будто пользовательский элемент управления не существует.

Для иллюстрации моей проблемы см. 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.

ЗдесьXAML для UserControl:

<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>

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Скорее всего, ActualHeight вашего пользовательского элемента управления равен нулю.Глядя на свой XAML для пользовательского элемента управления, вы можете просто установить Height и Width в XAML пользовательского элемента управления.

0 голосов
/ 07 апреля 2011

Кажется, ответ на мой вопрос заключается в том, чтобы поместить следующий код в мой 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
0 голосов
/ 06 апреля 2011

Я не могу определить, что такое UserControl по вашему изображению, но если вы установите свойство «свернутым», движок не будет читать размер, который я не думаю. Если UserControl не отображается, но вы хотите отобразить размеры, анимируйте свойство opacity вместо видимости. Штрих-код находится в строке 1, которая является верхней строкой, должна ли она быть в строке 2?

Правильно ли я считаю, что штрих-код должен быть ниже изображения с двумя рядами ящиков? Где находится UserControl? Что это?

...