2013-09-27 42 views
2

我希望MenuItem的菜單高度爲24。目前它有18. 我可以在MenuItem上添加Height =「24」,但我不想這樣做,如果我這樣做,那麼文本將不會垂直居中。爲什麼我的VerticalAlignment和VerticalContentAlignment未被拾取? 風格的其他屬性被挑選出來,所以我知道這種風格是適用的。MenuItem不會在其菜單中垂直拉伸

<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> 

編輯我試過「挑剔」的解決方案,它移動到這樣的風格:

<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內置的菜單項功能。這是處理這個問題的正確方法嗎?

回答

2

這是你如何調整你的菜單項:

 <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> 

可以移動這個HeaderTemplate中和高度在你的菜單項的風格

+0

結合將嘗試在週一。任何想法爲什麼VerticalAlignment和VerticalContentAlignment不起作用? – Gerard

+0

您的解決方案有效,我嘗試將其移至menuitem樣式,請參閱我編輯的問題:您對該解決方案有何看法? – Gerard

+0

yup ..菜單/工具欄是一些控件,它們將自己的特殊樣式應用於那裏的孩子......這就是爲什麼我們要麼重寫該樣式或應用模板和綁定以適應我們的要求... – Nitin