Разделитель WPF ToolBar не уменьшается ни к чему когда в StackPanel

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

Ваш процесс также имеет "куча" , который живет в нижняя часть конец Вашего процесса. Поскольку Вы выделяете память, эта "куча" может вырасти к верхнему концу Вашего адресного пространства. Как Вы видите, существует потенциал для "кучи" к [1 112], "сталкиваются" со стеком (немного как тектонические плиты!!!).

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

Однако с программированием GUI, возможно генерировать косвенная рекурсия . Например, Ваше приложение может обрабатывать сообщения краски, и, при обработке их, оно может вызвать функцию, которая заставляет систему отправлять другое сообщение краски. Здесь Вы явно не назвали себя, но OS/VM сделал это для Вас.

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

, Если у Вас нет очевидных рекурсивных функций затем, проверяют, чтобы видеть, называете ли Вы какие-либо библиотечные функции, которые косвенно заставят Вашу функцию быть названной (как неявный случай выше).

7
задан kenwarner 13 August 2009 в 20:26
поделиться

3 ответа

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

Если вы примените LayoutTransform к Separator , он отменяет все, что делает StackPanel .

<Separator>
    <Separator.LayoutTransform>
        <RotateTransform
            Angle="90" />
    </Separator.LayoutTransform>
</Separator>

Я не делаю. Тем не менее, я не понимаю необходимости StackPanel .

15
ответ дан 6 December 2019 в 08:44
поделиться

Панели инструментов забавны из-за того, что вы вкладываете внутрь. Они становятся забавными, когда все элементы не являются прямыми дочерними элементами ToolBar. Элементами группировки являются ToolBarTray (группа панелей инструментов), ToolBar и ToolBarPanel (логическая, для свертывания переполнения). Это то, что хочет видеть WPF:

<Grid>
    <ToolBarTray>
        <ToolBar Height="Auto">
            <ToolBarPanel Orientation="Horizontal" ToolBar.OverflowMode="AsNeeded"/>
            <MenuItem Header="Test1" />
            <Separator/>
            <MenuItem Header="Test2" />
        </ToolBar>
        <ToolBar Height="Auto">
            <ToolBarPanel ToolBar.OverflowMode="Never"/>
            <MenuItem Header="Test3" />
            <MenuItem Header="Test4" />
            <Separator/>
            <MenuItem Header="Test5" />
            <ToolBarPanel ToolBar.OverflowMode="AsNeeded"/>
            <MenuItem Header="Test6" />
            <MenuItem Header="Test7" />
        </ToolBar>
    </ToolBarTray>
</Grid>
2
ответ дан 6 December 2019 в 08:44
поделиться

Разделители по умолчанию имеют горизонтальную ориентацию.

Разделители, помещенные непосредственно внутри ToolBar, имеют измененные стили, потому что Toolbar переопределяет стили по умолчанию для своих элементов. Разделители, размещенные в другом месте, получают стиль разделителя по умолчанию. Поэтому вам нужно будет самостоятельно создать разделитель, если вы хотите сохранить его внутри StackPanel.

Это обсуждение CodeProject включает пример кода для выполнения этого.

Ссылка: WPF Unleashed Адам Натан, стр. 117.

4
ответ дан 6 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

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