C# WPF在扩展菜单中插入文本框

9wbgstp7  于 2023-03-31  发布在  C#
关注(0)|答案(1)|浏览(186)

我一直在尝试在菜单中插入一个TextBox(及其相应的灰色值)。
我已经尝试了很多东西(下面是我的最新尝试)
1.要么textBox没有沿着所有菜单拉伸
1.菜单有一些奇怪的偏移
我试过把它放在网格里,但它在右边增加了一个奇怪的偏移
Image Example

<Window x:Class="NotepadMain.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:NotepadMain"
        mc:Ignorable="d"
        Title="FirePad - A Notepad for the 21st Century" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <DockPanel LastChildFill="True" Grid.Row="0" VerticalAlignment="Center">
            <Menu DockPanel.Dock="Top"
                  FontFamily="Consolas"
                  FontSize="20">
                <MenuItem Header="_File" Width="auto">
                    <MenuItem Header="New" x:Name="newMenus" >
                        <MenuItem.Icon>
                            <Image Source="Assets/new.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="Save" x:Name="saveMenus" Click="saveMenus_Click" >
                        <MenuItem.Icon>
                            <Image Source="Assets/save.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="SaveAs" x:Name="saveAsMenus" Click="saveAsMenus_Click" >
                        <MenuItem.Icon>
                            <Image Source="Assets/save_as.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="Open" x:Name="openMenus" Click="openMenus_Click">
                        <MenuItem.Icon>
                            <Image Source="Assets/open.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <Separator />
                    <MenuItem Header="Print">
                        <MenuItem.Icon>
                            <Image Source="Assets/print.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                </MenuItem>

                <MenuItem Header="Edit">
                    <MenuItem Header="Copy" x:Name="copyMenus" >
                        <MenuItem.Icon>
                            <Image Source="Assets/copy.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="Paste" x:Name="pasteMenus" >
                        <MenuItem.Icon>
                            <Image Source="Assets/paste.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="Cut" x:Name="cutMenus" >
                        <MenuItem.Icon>
                            <Image Source="Assets/cut.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <Separator/>
                    <MenuItem Header="Undo" x:Name="undoMenus" >
                        <MenuItem.Icon>
                            <Image Source="Assets/undo.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="Redo" x:Name="redoMenus" >
                        <MenuItem.Icon>
                            <Image Source="Assets/redo.png"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <Separator/>

                    <TextBox  TextWrapping="Wrap" Width="100" Grid.Column="0">
                        <TextBox.ToolTip>Highlight a Word in the Text</TextBox.ToolTip>
                    </TextBox>

                </MenuItem>
                
            </Menu>
        </DockPanel>
        <RichTextBox Grid.Row="1" x:Name="richTextBox1">
            
        </RichTextBox>

    </Grid>
</Window>

上面的代码是我最新的尝试

klsxnrf1

klsxnrf11#

原因是MenuItem有一个偏移量,导致您在TextBox的左侧和右侧看到蓝色高亮显示。
如果您希望MenuItem的区域更多地刷新到其容器的边缘,则需要覆盖该区域的ControlTemplate。搜索“wpf menuitem controltemplate”并转到显示示例的Microsoft页面。
在他们的示例中,您将看到类似于以下代码片段的内容:

<!-- SubmenuItem -->
<ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}"
                 TargetType="{x:Type MenuItem}">
  <Border x:Name="Border"
          BorderThickness="1">
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"
                          SharedSizeGroup="Icon" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto"
                          SharedSizeGroup="Shortcut" />
        <ColumnDefinition Width="13" />
      </Grid.ColumnDefinitions>
      <ContentPresenter x:Name="Icon"
                        Margin="6,0,6,0"
                        VerticalAlignment="Center"
                        ContentSource="Icon" />

修改最后一个ColumnDefinition的宽度,你会看到它对你的结果的影响。从这里开始,你可以随心所欲地使用网格列定义。* 注意:这将影响所有菜单项,因此请注意这一点。*

相关问题