2016-06-28 9 views
0

У меня есть UserControl, который будет загружен во время выполнения в ContentControl. Пользовательский элемент управления не настраивает свой размер на родительский элемент управления, даже если я не задал ширину или высоту. Что я пропустил?Динамически добавленный UserControl не настраивается на размер родителя

 <ContentControl x:Name="MainContentControl" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" > 
     <Label Background="LightGray" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" >Sample control </Label> 
    </ContentControl> 

Контроль образца (метки) внутри ContentControl прекрасно работает и расширяется в зависимости от изменения размера ContentControl.

Когда я теперь заменить этикетку с UserControl размер UserControl имеет в MAXSIZE позицию метки, которая находится внутри него

Здесь UserControl

<UserControl x:Class="test.testUserControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Grid> 
    <Label Content="Label" HorizontalAlignment="Left" Margin="235,200,0,0" VerticalAlignment="Top"/> 
</Grid> 

+0

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

+0

Благодарим вас за ответ. Метка во втором примере кода не является проблемой. Сам UserControl не является полноразмерным для родительского ContentControl. Если я дам Grid цвет фона ... он показывает, что он окрашен только до конца метки. Реальная проблема, которая у меня есть, у меня есть в моем полном коде ListView внутри этого UserControl и хочу, чтобы это была полная ширина и с использованием полной высоты (без изменения ее верхнего и левого ...). Но, очевидно, UserControl не принимает размер его родительского элемента, и поэтому дочерние элементы usercontrols не расширяются. – freeskydiver

+0

ListViews - это PITAs об этом. Вы должны специально установить [горизонтальные и вертикальные выравнивания содержимого на них] (https://msdn.microsoft.com/en-us/library/system.windows.controls.control.horizontalcontentalignment%28v=vs.110%29. aspx? f = 255 & MSPPError = -2147217396), в противном случае их дети не занимают все свободное пространство. Вместо того, чтобы пытаться скомпоновать ваш код, создайте [mcve], который воспроизводит вашу проблему и помещает ее в [edit] – Will

ответ

0

Вы находитесь используя HorizontalAlignment и VerticalAlignment, который сообщает WPF «нарисуйте этот элемент управления только с нужным размером, затем выровняйте его в родительском контейнере в соответствии с этими правилами» ,

Значит, ваш ярлык получает точный размер, который ему нужен, а затем помещается в верхний левый угол.

Если верхняя часть кода, вы используете HorizontalContentAlignment и VerticalContentAlignement, что означает «выровнять содержание внутри этот контроль, как этот».

Таким образом, HorizontalContentAlignment="Center" VerticalContentAlignment="Center" нарисовал метку в соответствии с правилами родительского контейнера (звучит как в вашем случае Stretch), тогда содержимое внутри метки будет располагаться посередине.

Так что либо изменить свойства Horizonta/VerticalAlignment в горизонтальной/VerticalContentAlignment, или установить значение их Stretch

+0

Ya, который пахнет. – Will