Friday, December 24, 2010

Window.SizeToContent

В предыдущей статье все View демонстрационного приложения представляли собой UserControl'ы.

<UserControl
    x:Class="ViewModelLocatorSample.EditTagView"
    ...
    Height="84" Width="243">
    ...
</UserControl>

Для того чтобы показать View пользователю нужно было создать окно, которому в Content поместить нужный View.

public void Show(string title, FrameworkElement content)
{
    var window = new Window
    {
        Title = title,
        Content = content
    };

    window.Show();
}

Не знаю как вы, но лично я не знал как подогнать размеры окна под размер UserControl'а. Если вообще не устанавливать окну никаких размеров, то получим нечто подобное.

SizeToContent0
Понятное дело, что указыать какие-то конкретные значения смысла нет, т.к. у каждой View свои размеры. Можно присваивать окну размеры UserControl'а.

var window = new Window
{
    Title = title,
    Content = content,
    Width = content.Width,
    Height = content.Height
};

Но как видите это тоже не самая лучшая идея, т.к часть контента оказалась обрезана окном.

SizeToContent1

Решение проблемы оказалось очень простым. У Window есть свойство SizeToContent, которое (ну кто бы мог подумать) позволяет подгонять под размер контента только высоту, только ширину или сразу оба размера.

var window = new Window
{
    Title = title,
    Content = content,
    SizeToContent = SizeToContent.WidthAndHeight
};

No comments:

Post a Comment