wpf - MenuItem 不会在其菜单中垂直拉伸(stretch)

标签 wpf vertical-alignment menuitem

我希望 MenuItem 的高度为 24,就像菜单一样。目前有18个。 我可以将 Height="24"添加到 MenuItem 但我不想这样做,如果我这样做,那么文本将不会垂直居中。为什么我的 VerticalAlignment 和 VerticalContentAlignment 没有被选中? 样式的其他属性被拾取,因此我知道该样式已应用。

<Grid Background="Orange">
    <Grid.RowDefinitions>
        <RowDefinition Height="24"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Menu Grid.Row="0">
        <MenuItem Header="Project" />
    </Menu>
    <Grid Grid.Row="1">
        <Border BorderBrush="Orange" BorderThickness="2" Margin="2" CornerRadius="8,8,8,8">
        </Border>
    </Grid>
</Grid>

    <Style TargetType="MenuItem">
        <Setter Property="VerticalAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
    </Style>

编辑我尝试了“nit”的解决方案并将其移至如下样式:

<Style TargetType="MenuItem">
        <Setter Property="FontSize" Value="11" />
        <Setter Property="FontFamily" Value="Verdana" />
        <Setter Property="Padding" Value="0" />
        <Setter Property="Margin" Value="5,0,10,0" />
        <!-- variation on 'nit''s proposal -->
        <Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}"/>
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <!-- variation on 'nit''s proposal -->
                    <TextBlock VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource AncestorType=MenuItem}, Path=Header}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

它似乎可以在窗口中工作,例如

<Menu Grid.Row="0" Name="MainMenu" Height="24">
   <MenuItem Header="Project">
       <MenuItem Header="Open... Ctrl+O">
           <MenuItem.Icon>
              <Image Width="20" Height="20" Source="/Resources/openfile.jpg" />
           </MenuItem.Icon>
        </MenuItem> </MenuItem> ...etcetera

仅仅为了外观而使用 DataTemplate 感觉有点奇怪,但是 ControlTemplate 破坏了内置的 MenuItem 功能。这是处理问题的正确方法吗?

最佳答案

这是对齐菜单项的方法:

       <Menu   Grid.Row="0">
            <MenuItem  Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Menu}}}" Header="Project" >
                <MenuItem.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock VerticalAlignment="Center" Text="{Binding Header, RelativeSource={RelativeSource x:AncestorType=MenuItem}}"/>
                    </DataTemplate>
                </MenuItem.HeaderTemplate>
            </MenuItem>
        </Menu>

您可以在菜单项样式中移动此标题模板和高度绑定(bind)

关于wpf - MenuItem 不会在其菜单中垂直拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054642/

相关文章:

c# - 如何在wpf中将文本框绑定(bind)到MySQL数据源

html - 在响应式方形 div 中垂直居中图像

android - 溢出菜单不显示 - android

c# - 使用 WPF 显示流式富文本

c# - UserControl 中的 wpf 绑定(bind)集合属性

c# - 如何使用 Console.WriteLine 对齐列中的文本?

css - 当单元格内容非常小时,表格单元格垂直对齐的奇怪行为

c++ - 如何在 C++ 应用程序中自动检查菜单的完整性?

html - ASP :Menu children stays visible

c# - 以编程方式在按钮内添加图像