StackPanel компоновка глюк или есть объяснение
От: Аноним  
Дата: 17.04.11 08:26
Оценка:
Есть задачка, окно в нем какой-нибудь компоновщик и в нем DataGrid, который должен иметь отступ от других элементам по краям Margin = 10.

Ниже приведены два варианта с StackPanel и Grid, так вот если использовать Grid, то все выглядит как и ожидалось, если взять StackPanel, то нет отступа снизу и нет прокрутки, ощущение что DataGrid "думает" что окно не имеет нижней границы и спокойно растягивает себя вниз, при этом окно только как бы "обрезает" изображение таблицы.

Хотелось бы понять почему StackPanel дает такое поведение ?


<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:uc="clr-namespace:WpfControlLibrary2;assembly=WpfControlLibrary2"
        Title="MainWindow" Loaded="Button_Click">
    <StackPanel>
        <DataGrid Margin="10" ItemsSource="{Binding}"></DataGrid>
    </StackPanel>    
</Window>


или так
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:uc="clr-namespace:WpfControlLibrary2;assembly=WpfControlLibrary2"
        Title="MainWindow" Loaded="Button_Click">
    <Grid>
        <DataGrid Margin="10" ItemsSource="{Binding}"></DataGrid>
    </Grid>    
</Window>


На Loaded загружаются тестовые данные
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
           var coll = new System.Collections.ObjectModel.ObservableCollection<NmValType>();
            for (int i = 0; i <= 100; i++ )
            {
                coll.Add( new NmValType(){ Name = i.ToString(), NameValue = string.Format( "Значение {0}", i)});
            }
            DataContext = coll;
        }
    }

    public class NmValType
    {
        public string Name { get; set; }
        public string NameValue { get; set; }
    }
Re: StackPanel компоновка глюк или есть объяснение
От: i1yich  
Дата: 20.04.11 00:15
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Есть задачка, окно в нем какой-нибудь компоновщик и в нем DataGrid, который должен иметь отступ от других элементам по краям Margin = 10.


А>Ниже приведены два варианта с StackPanel и Grid, так вот если использовать Grid, то все выглядит как и ожидалось, если взять StackPanel, то нет отступа снизу и нет прокрутки, ощущение что DataGrid "думает" что окно не имеет нижней границы и спокойно растягивает себя вниз, при этом окно только как бы "обрезает" изображение таблицы.


А>Хотелось бы понять почему StackPanel дает такое поведение ?


Потому что такова ее задумка. Хочешь ограничивать контролы размерами контейнера — используй Grid или DockPanel, а у стекпанели одно из измерений внутреннего пространства действительно бесконечное и позволяет контролам иметь те размеры, которые они запросят в Measure.

Это же, кстати, объясняет и твой второй вопрос про сплиттер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.