2015-06-01 4 views
5

У меня есть StackPanel, в котором я обернул 7 Rectangles с различной шириной.WPF XAML и MinWidth и MaxWidth

Мой первый прямоугольник в стеке, у меня есть определенная ширина и максимальная ширина и один из других прямоугольников (см. Ниже x: Name = "ToBeCollapsed"), который по умолчанию свернут, НО делается видимым в определенном состоянии в C#.
Моя проблема в том, что первый прямоугольник не растягивается до максимальной ширины, если прямоугольник «ToBeCollasped» рухнул. Я думал, что первый прямоугольник заполнит пробел до MAX «755», если скомпенсированный прямоугольник будет свернут.

Неужели я ошибаюсь в своей логике?

Мой макет ниже:

<StackPanel x:Name="RectangleColumns" Width="1840" Orientation="Horizontal"> 

    <Rectangle MinWidth="575" MaxWidth="755" /> 
    <Rectangle Width="315"/> 
    <Rectangle Width="180" /> 
    <Rectangle Width="180"/> 
    <!--If collapsed first rectangle should grow to 755. MinWidth + 180--> 
    <Rectangle x:Name="ToBeCollapsed" Width="180"/> 
    <Rectangle Width="220"/> 
    <Rectangle Width="190"/> 
</StackPanel> 
+0

StackPanel предназначен для горизонтальной ориентации? – Clemens

+6

Мне кажется, что вам будет лучше использовать сетку. –

+0

@Clemens. Да, StackPanel - горизонтальная ориентация. Обновлено. – ClosDesign

ответ

3

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

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 

    <Grid Grid.Row="0" x:Name="RectangleColumns" HorizontalAlignment="Stretch "> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition MinWidth="200" MaxWidth="400"/> 
      <ColumnDefinition MaxWidth="50"/> 
      <ColumnDefinition MaxWidth="50"/> 
      <ColumnDefinition MaxWidth="50"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition MaxWidth="50"/> 
      <ColumnDefinition MaxWidth="50"/> 
     </Grid.ColumnDefinitions> 

     <Rectangle Grid.Column="0" Fill="Aqua" MinWidth="200" MaxWidth="400" /> 
     <Rectangle Grid.Column="1" Fill="Blue" Width="50"/> 
     <Rectangle Grid.Column="2" Fill="Aqua" Width="50" /> 
     <Rectangle Grid.Column="3" Fill="Blue" Width="50"/>    
     <Rectangle Grid.Column="4" Fill="Pink" Width="300" Name="toBeCollapsed"/> 
     <Rectangle Grid.Column="5" Fill="Aqua" Width="50"/> 
     <Rectangle Grid.Column="6" Fill="Blue" Width="50"/> 
    </Grid> 

    <Button Grid.Row="1" Content="Toggle Visibility" Name="ButtonToggle" /> 
</Grid> 

Code-позади, просто чтобы продемонстрировать:

public MainWindow() 
    { 
     InitializeComponent(); 
     ButtonToggle.Click += ButtonToggleOnClick; 
    } 

    private void ButtonToggleOnClick(object sender, RoutedEventArgs routedEventArgs) 
    { 
     toBeCollapsed.Visibility = toBeCollapsed.Visibility == Visibility.Collapsed 
      ? Visibility.Visible 
      : Visibility.Collapsed; 
    } 
+0

Я только что увидел это, я проверю это. Спасибо Джеймсу. – ClosDesign

+0

То, что мне нужно. Большое спасибо за пример. – ClosDesign

0

Всегда смотрите за schene:

В WPF, каждый LayoutControl является Grid - или воспроизводимости с сеткой - но она использует различный столбец или строку определение и Alignment.

Stackpanel является сетка, которая содержит следующие настройки (по горизонтали):

  • ColumnDefinition для каждого добавленных элементов управления с Auto размером
  • Все добавленные Ребенок контролирует HorizontalAligment находится центр
  • Дополнительная ColumnDefinition с * Ширина

И это то, как печенье забивается.

Автоматическая калибровка распределяет пространство на основе размера содержимого, находящегося внутри столбца или строки.

который обычно наименьший возможный размер:/

Так +1 для @Bradley Uffner

Использовать Grid где Columndefinition из Min/Max Rectangle является *.

+0

Хорошо. Я сделал это в Grid, но так как прямоугольник Collapsed находится в определении столбца, в моей Grid теперь есть пробел 180, где разваливается Rectangle. Есть идеи? Я также сделал первое RowDefinition of Width = "*". Нет мин. Или макс.-EDIT: Комментарий от Just Jaw James. Я собираюсь попробовать это. – ClosDesign

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