Для справки, я включаю вопрос о горизонтальном выравнивании, который даже упоминается в комментариях к нашей устаревшей кодовой базе.
Код находится в файле .xaml, соответствующая часть:
<MenuItem Header = "Help" HorizontalAlignment = "Right">
<MenuItem Header = "About"></MenuItem>
</MenuItem>
Этот код строится. Однако при отладке кода я вижу следующее:
Я хотел бы исправить это, чтобы можно было увидеть слово «Помощь» целиком.
Есть ли механизм смещения в файле XAML WPF или какой-либо другой способ сделать это?
ПРИМЕЧАНИЕ. Я нашел свой собственный «хак», который, похоже, решает проблему, просто добавляя пробелы после справки в кавычках и улучшая ее отображение, но, безусловно, должен быть более элегантный способ:
<MenuItem Header = "Help " HorizontalAlignment = "Right">
<MenuItem Header = "About" CommandParameter = "Help_About"></MenuItem>
</MenuItem>
По запросу, это весь контекст меню, некоторые пункты были запутаны, так как они могут быть проприетарными:
<Menu xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Name = "appFrameworkMainMenu"
Grid.Row = "0">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel HorizontalAlignment = "Stretch"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Name = "Name1" Header = "File">
<MenuItem Header = "MenuItem1a" ></MenuItem>
<Separator />
<MenuItem Header = "Exit Application" ></MenuItem>
</MenuItem>
<MenuItem Name = "Name2" Header = "File">
<MenuItem Header = "MenuItem2a" ></MenuItem>
<MenuItem Header = "MenuItem2b" ></MenuItem>
</MenuItem>
<MenuItem Name = "Name3" Header = "File">
<MenuItem Header = "MenuItem3a" ></MenuItem>
<MenuItem Header = "MenuItem3b" ></MenuItem>
</MenuItem>
<!-- align right: http://stackoverflow.com/questions/3023638/how-do-i-right-align-the-help-menu-item-in-wpf -->
<MenuItem Header = "Help " HorizontalAlignment = "Right" >
<MenuItem Header = "About" ></MenuItem>
</MenuItem>
</Menu>
Затем, согласно предложению комментария, я попробовал простой текстовый блок, и он оказался слева, независимо от того, находится ли в коде директива HorizontalAligment = "Right":
<TextBlock HorizontalAlignment = "Right" >Help me </TextBlock>
Вместо Menu
попробуйте поместить простой текст с горизонтальным выравниванием вправо в Grid.Row = "0"
и посмотрите, что получится. Похоже, ваш Grid
больше, чем ожидалось.
И в вашем Menu
не должно быть таких вещей, как xmlns
. Он ни в коем случае не должен быть корневым элементом.
@Martin Braun - Если я удалю один из тегов xmlns, это ничего не улучшит. Если я удалю их обоих, возникнет ошибка: Ошибка XDG0004 Пространство имен по умолчанию не определено. Если у вас есть элегантный способ обойти это, отправьте сообщение в качестве ответа с примером (например, пространство имен выше, меню под ним или каким бы ни был ваш обходной путь.)
Извините, прошло некоторое время с тех пор, как я сделал WPF. HorizontalAlignment = "Stretch" TextAlignment = "Right"
для TextBlock
должен показать, есть ли проблема в Энергосистеме. Также является Menu
вашим корневым элементом? Вы не должны этого делать! На самом деле вы должны поместить свой элемент управления Menu
в DockPanel
, как показано в этой статье: wpf-tutorial.com/common-interface-controls/menu-control
Вместо этого поместите Menu
внутрь DockPanel
:
<Window x:Class = "WpfTutorialSamples.Common_interface_controls.MenuSample"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MenuSample" Height = "600" Width = "800">
<DockPanel>
<Menu DockPanel.Dock = "Top" Name = "appFrameworkMainMenu">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel HorizontalAlignment = "Stretch"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Name = "Name1" Header = "File">
<MenuItem Header = "MenuItem1a" />
<Separator />
<MenuItem Header = "Exit Application" />
</MenuItem>
<MenuItem Name = "Name2" Header = "File">
<MenuItem Header = "MenuItem2a" />
<MenuItem Header = "MenuItem2b" />
</MenuItem>
<MenuItem Name = "Name3" Header = "File">
<MenuItem Header = "MenuItem3a" />
<MenuItem Header = "MenuItem3b" />
</MenuItem>
<MenuItem Header = "Help" HorizontalAlignment = "Right">
<MenuItem Header = "About" />
</MenuItem>
</Menu>
<Grid ....>
</DockPanel>
</Window>
Отказ от ответственности: я не тестировал этот код, но уверен, что он должен помочь вам решить эту проблему.
Это кажется достойным, но это просто создает ошибку времени выполнения в моей системе. Одна проблема заключается в том, что экземпляр класса не создается, по крайней мере, в моей кодовой базе, так что это неправильно. Я пробовал варианты без него и с DockPanel, но без окна, и ни один из них не работал у меня.
Из-за проблем в моем комментарии выше, для меня работа с дополнительными пробелами после «Справка» терпима, поскольку для конечных пользователей это выглядит нормально, поэтому, если не будет дано больше ответов, я оставлю это здесь. Я проголосовал за ответ за усилия и потому, что он может помочь кому-то еще в подобной ситуации.
Пожалуйста, поделитесь всем своим блоком
<Menu>
и постарайтесь правильно отформатировать код при этом.