首先我想提一提的是我是C#WPF的新手。 我已經搜索了很多,但到目前爲止我還沒有找到妥善解決我的問題,我希望現在有人能幫助我。C#WPF ContentPresenter MenuItem TextAlignment
現在我的問題:
我有一個C#WPF應用程序中,我有一個菜單。我正在使用Window.Resoucres區域爲x定義新模板:輸入MenuItem。 這個工程到目前爲止。
但是,我不明白,要將文本居中放在多行(多行)菜單中。
我有一個菜單項和文本「成本概覽」。這應該被集中顯示在他們自己之間,因爲我給菜單固定的寬度。
我想是這樣的(只是居中):
Costs
Overview
在這裏,我,我目前使用的樣式模板:
<Style x:Key="MenuItem" TargetType="{x:Type MenuItem}">
<Setter Property="Background" Value="#FF6C6D6E"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Width" Value="60"/>
<Setter Property="Height" Value="90"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="Center" >
<Grid>
<!-- ContentPresenter to show an Icon -->
<ContentPresenter Margin="0,10,0,35" x:Name="Icon" VerticalAlignment="Center" ContentSource="Icon"/>
<!-- Content for the menu text etc -->
<ContentPresenter Margin="0,55,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" ContentSource="Header" RecognizesAccessKey="True" />
</Grid>
</Border>
<!-- These triggers re-configure the four arrangements of MenuItem to show different levels of menu via Role -->
<ControlTemplate.Triggers>
<!-- Role = TopLevelItem : this is a child menu item from the top level without any child items-->
<Trigger Property="Role" Value="TopLevelItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Width" Value="80" />
<Setter Property="Height" Value="80" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Trigger>
<!-- Using colors for the Menu Highlight and IsEnabled-->
<Trigger Property="IsHighlighted" Value="true">
<Setter Property="Background" Value="#FF939498" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#FF939498" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
這種風格給我的菜單下面的樣子。
正如你所看到的,在菜單中的文本不居中。 我已經嘗試了一些解決方案,例如在ContentPresenter中設置TextBlock以設置TextAlignment =「Center」屬性,但我不知道如何獲取TextBlock Binding中的MenuItem文本。
我也嘗試將TextBlock.TextAlignment =「Center」屬性設置爲ContentPresenter,但它也不起作用。
正如你可能看到的,我的菜單有另一個問題。你知道,當我將鼠標懸停在MenuItem上時,我怎樣才能消除藍色焦點?正常的懸停風格是菜單會得到淺灰色,就像按鈕的中間一樣。另外我的MenuItem不使用菜單的全部寬度...
我期待着每一個想法。
在此先感謝!
SOLUTION
bars22給了我正確的提示..
我忘了,我有一個正常的菜單幾行更深。我只是在看的ControlTemplate ...
這裏是我的解決方案:
我闊葉從菜單項的風格,因爲我做到了,並改變了我的菜單如下:
<Menu Background="{x:Null}" ItemsSource="{Binding PageViewModels}">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<Menu.ItemTemplate>
<DataTemplate>
<MenuItem Icon="{Binding Icon}"
Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
CommandParameter="{Binding }"
Style="{StaticResource MenuItem}">
<MenuItem.Header>
<StackPanel>
<TextBlock TextAlignment="Center" Text="{Binding Name}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
</DataTemplate>
</Menu.ItemTemplate>
</Menu>
OMG ..謝謝..你給了我正確的提示。我忘了我有一個正常的菜單更深的幾行。我只是在看ControlTemplate ..很愚蠢......我設置了 現在它可以工作.. –
Chris
這很好。祝你好運,發展它) – bars222
謝謝..也許你可以幫我解決我的第二個問題?菜單中的藍色焦點?你知道我可以如何刪除它嗎? – Chris