2015-07-30 1 views
1

У меня проблема с компоновкой. Мне нужно сделать окно с макетом, который работает для этих двух ситуаций:Сделать заполнение контейнера только по содержанию

enter image description here

Я пытался что-то с DockPanel, но таким образом желтый контейнер растягивал даже без содержания. Мне нужно что-то сделать с контентом (UserControl), который делает это возможным.

EDIT: СОДЕРЖАНИЕ «Изображение в„FIXED С“=„CONTENT ОСНОВНОЙ ВЫСОТА“

+0

Он может отображался на экран вида (но пустой) по какой-то причине мы не» Знаю. – almulo

ответ

0

Я думаю, вы могли бы использовать для этого IValueConverter ...

<Grid> 
    <Grid.Resources> 
     <converters:NullableToVerticalAlignment FalseAlignment="Top" 
               TrueAlignment="Stretch" /> 
    </Grid.Resources> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <custom:ContentWithFixedHeight /> 

    <custom:ContentWithVariableHeight Grid.Row="1" 
             VerticalAlignment="{Binding Content, 
                    RelativeSource={RelativeSource Mode=Self}, 
             Converter={StaticResource NullableToVerticalAlignmentConverter}}" /> 
</Grid> 

И сам конвертер:

public class BooleanToVerticalAlignment : IValueConverter 
{ 
    public VerticalAlignment FalseAlignment { get; set; } 

    public VerticalAlignment TrueAlignment { get; set; } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (bool)value ? TrueAlignment : FalseAlignment; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
0

Используйте выборочный IValueConverter для переключения значения высоты на рядам основе, имеет ли средний контроль какое-либо содержимое

Пользовательские IValueConverter:

public class BoolToGridLengthConverter : IValueConverter 
{ 
    public GridLength TrueLength { get; set; } 

    public GridLength FalseLength { get; set; } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (bool)value ? TrueLength : FalseLength; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

XAML:

<UserControl.Resources> 
    <stackOverflow:BoolToGridLengthConverter x:Key="BoolToGridSizeConverter" TrueLength="1*" FalseLength="Auto"/> 
    <stackOverflow:BoolToGridLengthConverter x:Key="BoolToGridSizeConverter2" TrueLength="0" FalseLength="1*"/> 
</UserControl.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="{Binding ElementName=ChangingSizeControl, Path=HasContent, Converter={StaticResource BoolToGridSizeConverter}}"/> 
     <RowDefinition Height="{Binding ElementName=ChangingSizeControl, Path=HasContent, Converter={StaticResource BoolToGridSizeConverter2}}"/> 
    </Grid.RowDefinitions> 
    <UserControl Grid.Row="0" x:Name="FixedSizeControl"/> 
    <ContentControl Grid.Row="1" x:Name="ChangingSizeControl"/> 
    <UserControl Grid.Row="2" x:Name="MainContentControl"/> 
</Grid> 
Смежные вопросы