Q:

"Железные" рамки для контролов

Есть ли панель, в которую можно было бы запихнуть Control'ы, которые не смогут выходить за пределы этой панели, Margin которых будет отсчитываться от границ этой панели и при этом, эта панель должна быть "резиновой"? 
Если честно, у меня уже мозги взрываются от логики XAML. Понимаю, что возможно уход контрола за границы окна кому-то может быть нужен, но неужели без жёсткой фиксации высоты и ширины нельзя научить контролы правильно обтекать окно/панель?
К примеру, TextBlock отказывался переходить на новую строчку, пока я не задал жёстко границу панели, в которой он находится, при этом, если я пробую изменять ширину панели, текст не адаптируется под новую ширину, а остаётся неизменным (очевидно, это потому что я был вынужден фиксировать ширину панели и она более не реагирует на изменение окна).
Аналогично, вот тут я пытался понять почему ListView уходит за пределы окна и какой в этом смысл. А главное понять, как исправить поведение. К сожалению, никто не отреагировал на вопрос и я всё ещё в тупике.

A:

Если я правильно понимаю, то вам нужно использовать Grid. StackPanel, которую вы скорей всего используете, бесконечна в ширину или высоту для внутренних элементов, она просто обрезает представление внутренних элементов, не влияя на их ширины/высоты, не вызывая trimming у TextBlock, например. Grid же позволяет настроить ширины/высоты строк/колонок как вам нравится.
Например:
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TextBlock Text="1 1" />
    <TextBlock Text="1 2 Эта колонка занимает всю оставшуюся ширину"
               Grid.Column="1"
               TextTrimming="CharacterEllipsis"/>
    <ListBox Grid.Row="1">
        <sys:String>2 1 Этот</sys:String>
        <sys:String>ListBox</sys:String>
        <sys:String>узкий</sys:String>
        <sys:String>но занимает</sys:String>
        <sys:String>всю оставшуюся</sys:String>
        <sys:String>высоту.</sys:String>
    </ListBox>
    <ListBox Grid.Row="1"
             Grid.Column="1">
        <sys:String>2 2 Этот</sys:String>
        <sys:String>ListBox</sys:String>
        <sys:String>широкий</sys:String>
        <sys:String>и высокий.</sys:String>
    </ListBox>
</Grid>

Стоит отметить, что по умолчанию у всех элементов Grid.Row и Grid.Column равны 0.
Попробуйте потаскать окно. TextBlock в верхней колонке будет тримиться, а у ListBox появятся скролы.

