2015-06-24 2 views
0

Мне нужно создать UserControl, который размещен в «родительском» ContentControl, который настроен с горизонтальным и вертикальным выравниванием «Центр».WPF Force UserControl расширяется, чтобы заполнить максимальный размер рендера

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

Я заметил, что если размер ребенка будет больше, чем размер рендеринга, я получаю размер, который я хочу как свойство «Желаемый размер» для этого элемента управления. Однако я не вижу, как я могу получить эту информацию без увеличения размера элемента управления.

Я создал этот образец, чтобы проиллюстрировать ситуацию, я хочу, чтобы розовый фон ChildControl растягивался по всему окну.

Просто чтобы прояснить, я только контроль над «ControlableElementA» и «ControlableElementB» я не могу связать с главным окном, в реальном приложении я использую это в качестве встроенного окна с различными уровнями иерархии между ..

«ChildControl» и «ParentControl» недоступны из-за ограничений выше меня.

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="300" Width="300"> 
    <Grid> 
     <ContentControl Name="ParentControl" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <Grid Name="ControlableElementA" Background="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <ContentControl Name="ControlableElementB"> 
        <Grid Name="ChildControl" Background="Pink" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
         <Button Width="30" Height="30"></Button> 
        </Grid> 
       </ContentControl> 
      </Grid> 
     </ContentControl> 
    </Grid> 
</Window> 

Благодаря вперед, я прошу прощения, если описание немного загадочное

+0

Вы можете попробовать изменить ChildControl на DockPanel и установить для свойства LastChildFill значение true. – Alex

+0

К сожалению, как я уже упоминал В реальном приложении, нет никакой власти над содержимым childControl. Спасибо за ответ в любом случае. –

ответ

2

HorizontalAlignment и VerticalAlignment в Stretch означают «Растянуть до максимального размера в пределах родительского контейнера.»

Однако ваш родительский контейнер установлен в Center, что означает, что ваш UserControl эффективно имеет Auto ширину и высоту.

Чтобы это исправить, просто удалить:

HorizontalAlignment="Center" VerticalAlignment="Center" 

С ContentControl.

+0

К сожалению, у меня нет контроля над родительским элементом управления. в противном случае решение было бы тривиально. Я сделал этот образец абстрактно отображающим гораздо более сложную архитектуру. Спасибо за ответ в любом случае. –

Смежные вопросы