我希望 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/