Изменение размера окна WPF в зависимости от оставшейся области в DockPanel - PullRequest
1 голос
/ 07 ноября 2011

У меня есть сценарий, в котором я хочу динамически визуализировать объект пользовательской формы.Эта форма похожа на форму WinForms.В нашей реализации будет отображаться одна или несколько панелей кнопок, кнопки могут находиться только внутри панели кнопок, а также множество элементов управления редактирования, которые пользователь будет использовать для ввода данных.

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

Моя проблема связана с определением размера формы.Например, у меня есть форма, которая должна быть 15 строк на 80 столбцов, скажем, это переводит до 500 единиц в высоту и 800 единиц в ширину.Это будет область формы, не включая панели кнопок.Прямо сейчас я вычисляю высоту и ширину окна в FormPreviewManager.Тем не менее, это громоздко, так как я должен дать общее количество единиц, включая размер панели кнопок и границы окон, которые могут измениться, поскольку у них есть возможность включить строку заголовка или нет в плавающем окне формы.

В рамках визуализации формы я использую DockPanel, чтобы визуализировать панель (ы) кнопок и требовать оставшееся пространство в качестве моей сетки строк и столбцов.Я попытался создать панель (и) кнопок, установив оставшееся пространство для моего объекта FormGrid, а затем специально установив ширину и высоту для FormGrid, но это не меняет размер содержащего окна.

Как можноЯ делаю так, чтобы размеры плавающего окна автоматически?Я хочу, чтобы можно было нарисовать панель (и) кнопок, а затем сказать, что оставшееся пространство составляет 500 единиц в высоту и 800 единиц в ширину, а затем настроить окно на любой размер, необходимый для хранения этих данных, не больше и не меньше.

Любая помощь в этом, или возможный другой подход, была бы отличной.

Обновление

В принципе, если бы это было мое полное определение XAML для моего окна, я бы хотел установитьширина и высота UnusedContent и соответственно измените размер окна.

<Grid>
    <DockPanel>
        <StackPanel DockPanel.Dock="Top" Height="50" />
        <StackPanel DockPanel.Dock="Left" Width="50" />
        <ContentControl x:Name="UnusedContent" />
    </DockPanel>
</Grid>

Если бы я установил значение UnusedContent 200 на 200, это создаст окно с внутренними размерами 250 на 250, область содержимого плюс две панели стека..

1 Ответ

0 голосов
/ 07 ноября 2011

Вы можете попробовать разместить элемент управления, чтобы заполнить оставшееся пространство DockPanel, а затем связать его со свойствами ActualHeight и ActualWidth этого элемента управления

.

<DockPanel>
    <StackPanel DockPanel.Dock="Top" Height="50" />
    <StackPanel DockPanel.Dock="Left" Width="100" />
    <ContentControl x:Name="Spacer" />
</DockPanel>

<Grid Height="{Binding ElementName=Spacer, Path=ActualHeight}"
      Width="{Binding ElementName=Spacer, Path=ActualWidth}" />

...