Лучший способ измерить контейнеры в Flex для повиновения ТОЛЬКО явным размерам родительских контейнеров

с очень простым примером из примера текстового поля WPF изестероидов:

  1. поместите переменную, которую вы хотите использовать, ДО вашего кода xaml.
  2. Убедитесь, что ваш многострочный текст в двойных кавычках для расширения любых переменных, например. @ "" @

, если вы смотрите на это в редакторе кода, строки, на которые вы хотите посмотреть, это: Строка 4 - ваша переменная Строка 33 - определение переменной в качестве текста для текстового блока [ 117]

#region XAML window definition
# Right-click XAML and choose WPF/Edit... to edit WPF Design
# in your favorite WPF editing tool
$adminname = "Guyver1"

$xaml = @"

    
        
            
            
        
        
            
            
            
            
        
        Please enter your details:

        
        $adminname

        
        Email

        
        
        
        
        
        
            
            
        
    

"@
#endregion

#region Code Behind
function Convert-XAMLtoWindow
{
    param
    (
        [Parameter(Mandatory=$true)]
        [string]
        $XAML
    )

    Add-Type -AssemblyName PresentationFramework

    $reader = [XML.XMLReader]::Create([IO.StringReader]$XAML)
    $result = [Windows.Markup.XAMLReader]::Load($reader)
    $reader.Close()
    $reader = [XML.XMLReader]::Create([IO.StringReader]$XAML)
    while ($reader.Read())
    {
        $name=$reader.GetAttribute('Name')
        if (!$name) { $name=$reader.GetAttribute('x:Name') }
        if($name)
        {$result | Add-Member NoteProperty -Name $name -Value $result.FindName($name) -Force}
    }
    $reader.Close()
    $result
}

function Show-WPFWindow
{
    param
    (
        [Parameter(Mandatory=$true)]
        [Windows.Window]
        $Window
    )

    $result = $null
    $null = $window.Dispatcher.InvokeAsync{
        $result = $window.ShowDialog()
        Set-Variable -Name result -Value $result -Scope 1
    }.Wait()
    $result
}
#endregion Code Behind

#region Convert XAML to Window
$window = Convert-XAMLtoWindow -XAML $xaml
#endregion

#region Define Event Handlers
# Right-Click XAML Text and choose WPF/Attach Events to
# add more handlers
$window.ButCancel.add_Click(
    {
        $window.DialogResult = $false
    }
)

$window.ButOk.add_Click(
    {
        $window.DialogResult = $true
    }
)
#endregion Event Handlers

#region Manipulate Window Content
$window.TxtName.Text = $env:username
$window.TxtEmail.Text = 'test@test.com'
$null = $window.TxtName.Focus()
#endregion

# Show Window
$result = Show-WPFWindow -Window $window

#region Process results
if ($result -eq $true)
{
    [PSCustomObject]@{
        EmployeeName = $window.TxtName.Text
        EmployeeMail = $window.TxtEmail.Text
    }
}
else
{
    Write-Warning 'User aborted dialog.'
}
#endregion Process results

example

7
задан Aaron 28 October 2008 в 23:46
поделиться

4 ответа

Необходимо использовать параметр "авторасположения" на VBox, как говорится в документации:

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

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

Я надеюсь, что это поможет Вам.

8
ответ дан 6 December 2019 в 07:30
поделиться

AutoLayout=false, кажется, только препятствует тому, чтобы расположение было повторно выполнено когда детское изменение размера. Однако, если Вы добавите или удалите детей, то расположение повторно выполнится так или иначе.

Установка minHeight=0 действительно полностью разъединяет (внешний) размер VBox от размера и числа детей, которое является тем, что я хотел.

При трожении лапой через Исходный код Flex, я не видел механизм, которым установка minHeight=0 заставила его работать как, я хотел, таким образом, я приветствую Yarin для обнаружения его.Спасибо!

2
ответ дан 6 December 2019 в 07:30
поделиться

установка minHeight = 0 является всем, что необходимо сделать.

Это говорит VBox игнорировать, это - детские измерения при калибровке себя, и вычислите его высоту вместо этого на основе родительских ограничений своего собственного/it. Установите все остальное, как Вы обычно были бы, прокручивая, и все остальное будет работать отлично.

Проведенные ДНИ на этом год назад - это не интуитивно, они, возможно, вероятно, назвали свойство лучше. Надежда это экономит u парням некоторое время...

13
ответ дан 6 December 2019 в 07:30
поделиться

Установите свойства своего Контейнера:

clipContent = true;
verticalScrollPolicy = "off"

Затем Ваш VBox должен автоматически отсечь, когда он имеет percentHeight = 100;

Работы для меня в Flex 3.

Если необходимо стать действительно необычными, можно установить scrollRect на объектах:

scrollRect = new Rectangle(x, y, w, h);

в зависимости от того, что Вам нужен он, чтобы сделать.

1
ответ дан 6 December 2019 в 07:30
поделиться
Другие вопросы по тегам:

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