Вынудите пользовательское Управление WPF изменить размер правильно

MButton::
    KeyWait, MButton, T0.3
    If !(ErrorLevel)
    { 
        Sleep, 300
        If (A_PriorHotKey = "MButton Up") ; double click
            Send ▪
        else                              ; single click
            Send •
    }
    else                                  ; push-and-hold
        Send ◦
return

MButton Up:: return
5
задан Dave Clemmer 13 January 2013 в 19:08
поделиться

3 ответа

Ваша проблема состоит в том, что панели Canvas не изменяют размер для установки их содержанию.

Вы относились, чтобы Измерить и Расположить. Действительно ли Вы знакомы с двумя системами расположения передачи WPF? Прочитайте эту статью для получения дополнительной информации: Система Расположения WPF.

Эта статья также описывает то, что различные панели делают для расположения. Каждый тип панели отличается.

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

Элементы затем сказаны, каким размером они будут и попросили располагать себя и их детей.

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

Тип StackPanel не автоизмеряет вообще в размере, в котором он ориентирован, но он автоизмерит в другом размере.

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

Я предложил бы пробовать Сетку только одной строкой/столбец.

Или Вы могли создать новый класс Холста, который имеет лучшие возможности автокалибровки. Во время меры Вы хотели бы измерить дочерние элементы и измерить Ваш Холст соответственно. Вы могли бы найти класс как это полезным в будущем.

Вот статья об Автоматической компоновке в WPF.

Если Вы хотите создать пользовательскую панель, вот подтема на ней: Пользовательские Элементы Панели.

Править: Еще одна вещь: можно также связать ширину/высоту дочернего элемента к свойствам ActualWidth и ActualHeight на холсте так, чтобы ребенок скорректировал размер его родителя. Можно использовать преобразователь для установки отношения размера при необходимости.

16
ответ дан 18 December 2019 в 08:31
поделиться

Необходимо переопределить метод MeasureOverride управления и возвратить желаемый размер (размер холста) оттуда. Затем родительское управление изменило бы размер себя для размещения, это - ребенок (если это может).

1
ответ дан 18 December 2019 в 08:31
поделиться

Вы можете использовать UniFormGrid, чтобы заархивировать это. Задайте для столбцов или строк значение 1, чтобы можно было получить элементы с вертикальным / горизонтальным расположением

<UniformGrid  Columns="1">
   <Button Content="Content 1"/>
   <Button Content="Content 2"/>
   <Button Content="Content 3"/>
</UniformGrid>
0
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: