2009-06-03 4 views

ответ

14

Используйте элемент Grid как элемент верхнего уровня в пользовательском интерфейсе - он растянется, чтобы заполнить его контейнер. Затем положите Canvas с HorizontalAlignment="Stretch" внутри Grid, и он будет вести себя так, как вы хотите.

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Canvas Background="Blue"/> 
</Grid> 

Это сработало для меня. Ключ - это элемент пользовательского интерфейса верхнего уровня. В то время как Grid заполняет все свободное пространство по умолчанию, Canvas es занимают столько места, сколько требует их содержимое.

+0

Знаете ли вы, нужен ли атрибут «x: Class =»? Я попытался использовать Grid как сдерживание, но по какой-то причине все просто исчезает. – resopollution

+0

<Холст.Ресурсы> Это не работает для меня = ( – resopollution

+1

Как вы тестирования я вставил это в kaxaml и это работает для меня, так что вам не нужен х: атрибут класса: <Сетка XMLNS = "HTTP : //schemas.microsoft.com/winfx/2006/xaml/presentation " xmlns: x =" http://schemas.microsoft.com/winfx/2006/xaml "> <Фон на холсте =" Синий "/> –

1

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

<DockPanel> 
    <Canvas /> 
</DockPanel> 
+0

Есть ли быстрый способ сделать это для метки ? – resopollution

+0

Я попытался удалить свойство Height и Width, но все просто исчезает. – resopollution

1

Холст должен делать это автоматически, если только вы не вручную устанавливаете высоту и/или ширину. Какой контроль вы пытаетесь разместить на холсте? Можете ли вы разместить свой код?

+0

Я отправил свой код. Canvas является основным родительским элементом всего приложения. – resopollution

+0

Я попытался удалить свойство Height и Width, но все просто исчезает. – resopollution

4

Я предполагаю, что вы уже пробовали
canvas.HorizontalAlignment = HorizontalAlignment.Stretch

Если это не работает, то, что вы могли бы сделать, это связать Width и Height свойства холста к ActualWidth и ActualHeight свойств вмещающих окно.

+0

canvas.HorizontalAlignment = HorizontalAlignment.Stretch выполняется внутри кода C#? У меня только есть доступ к XAML. Также у меня нет окна Window = =. Когда я делаю элемент Binding, мое приложение Silverlight падает. – resopollution

+1

Немного поздно, но для тех, у кого есть одна и та же проблема: '' '' в коде XAML работал очень хорошо в моем случае, и это избавляет вас от бокса в каждом холсте в сетку (особенно если у вас их много). –

1

Проблема в том, что вы указываете Height и Width. Без этих свойств элемент управления может исчезнуть в дизайнере, но он должен соответствующим образом соответствовать, когда вы вставляете холст в другой элемент управления.

Если я правильно помню, следующая версия WPF будет иметь свойства «DesignWidth» и «DesignHeight», которые позволят вам отображать элемент управления в дизайнере с заданным размером без выполнения его измерения при вставке в другие элементы управления.

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