2016-01-24 29 views
1

下面顯示是我的代碼WPF功能區按鈕文本不符合

<RibbonWindow x:Class="WPFRibbonButonNameTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<DockPanel> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Ribbon x:Name="RibbonWin" SelectedIndex="0" Background="Transparent"> 
      <RibbonTab Header="Tab 1" Selector.IsSelected="True"> 
       <RibbonGroup x:Name="grpNewPurchasing" Header=""> 
        <RibbonButton x:Name="btnNewHirePurchase" Label="My Test Buton" Width="200" LargeImageSource="Images/cart1.png" KeyTip="N"/> 
       </RibbonGroup> 
      </RibbonTab> 
     </Ribbon> 
    </Grid> 
</DockPanel> 

以上功能區按鈕文字兩行顯示。我想在一行中顯示文本。我如何正確地做到這一點?

請參閱附件圖片。

Screen shot

回答

0

您需要修改此按鈕的模板。右鍵單擊設計和選擇

編輯模板 - >編輯副本..

要麼使整個鍵寬或修改字體大小。另一種選擇是將TextWrapping設置爲None,但最終可能會出現裁剪文字。

2

正如@菲利普所說,你必須修改ControlTemplate。這是您必須在ControlTemplateTriggers集合中修改的觸發器之一。

加入此產品到您的RibbonWindowResources集合或更好,在一個單獨的ResourceDictionary

<Style TargetType="{x:Type RibbonButton}" BasedOn="{StaticResource {x:Type RibbonButton}}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="RibbonButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
       <Border BorderThickness="{TemplateBinding Border.BorderThickness}" CornerRadius="{TemplateBinding RibbonControlService.CornerRadius}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="OuterBorder" SnapsToDevicePixels="True"> 
        <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" CornerRadius="{TemplateBinding RibbonControlService.CornerRadius}" BorderBrush="#00FFFFFF" Name="InnerBorder"> 
         <StackPanel Name="StackPanel"> 
          <Image Source="{TemplateBinding RibbonControlService.LargeImageSource}" Name="PART_Image" Width="32" Height="32" Margin="{DynamicResource {ComponentResourceKey TypeInTargetAssembly=Ribbon, ResourceId=LargeImageMargin}}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="Center" RenderOptions.BitmapScalingMode="NearestNeighbor" /> 
          <Grid Name="Grid" HorizontalAlignment="Center" VerticalAlignment="Center"> 
           <RibbonTwoLineText TextAlignment="Center" LineHeight="13" LineStackingStrategy="BlockLineHeight" Text="{TemplateBinding RibbonControlService.Label}" Name="TwoLineText" Margin="1,1,1,0" HorizontalAlignment="Center" VerticalAlignment="Top" /> 
          </Grid> 
         </StackPanel> 
        </Border> 
       </Border> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Large"> 
         <Setter Property="FrameworkElement.MinWidth" Value="44" /> 
         <Setter Property="FrameworkElement.Height" Value="66" /> 
         <Setter Property="FrameworkElement.MinHeight" TargetName="Grid" Value="26" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Small"> 
         <Setter Property="FrameworkElement.Height" Value="22" /> 
         <Setter Property="FrameworkElement.Margin" TargetName="PART_Image" Value="1,0,1,0" /> 
         <Setter Property="Image.Source" TargetName="PART_Image" Value="{Binding SmallImageSource, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="FrameworkElement.Width" TargetName="PART_Image" Value="16" /> 
         <Setter Property="FrameworkElement.Height" TargetName="PART_Image" Value="16" /> 
         <Setter Property="FrameworkElement.HorizontalAlignment" TargetName="TwoLineText" Value="Left" /> 
         <Setter Property="FrameworkElement.Margin" TargetName="TwoLineText" Value="1,1,1,1" /> 
         <Setter Property="StackPanel.Orientation" TargetName="StackPanel" Value="Horizontal" /> 
        </DataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Small" /> 
          <Condition Binding="{Binding Path=IsInQuickAccessToolBar, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="FrameworkElement.Height" Value="NaN" /> 
        </MultiDataTrigger> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.IsLabelVisible, RelativeSource={RelativeSource Mode=Self}}" Value="False"> 
         <Setter Property="UIElement.Visibility" TargetName="TwoLineText" Value="Collapsed" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Collapsed"> 
         <Setter Property="UIElement.Visibility" TargetName="PART_Image" Value="Collapsed" /> 
        </DataTrigger> 
        <Trigger Property="UIElement.IsMouseOver" Value="True"> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="{Binding MouseOverBackground, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{Binding MouseOverBorderBrush, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF" /> 
        </Trigger> 
        <Trigger Property="UIElement.IsKeyboardFocused" Value="True"> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="{Binding FocusedBackground, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{Binding FocusedBorderBrush, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF" /> 
        </Trigger> 
        <Trigger Property="ButtonBase.IsPressed" Value="True"> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="{Binding PressedBackground, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{Binding PressedBorderBrush, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder" Value="#00FFFFFF" /> 
        </Trigger> 
        <Trigger Property="RibbonControlService.IsInControlGroup" Value="True"> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{Binding Ribbon.BorderBrush, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 
         <Setter Property="Border.BorderThickness" TargetName="OuterBorder" Value="0,0,1,0" /> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder" Value="0,0,0,0" /> 
         <Setter Property="Border.CornerRadius" TargetName="InnerBorder" Value="0,0,0,0" /> 
        </Trigger> 
        <Trigger Property="UIElement.IsEnabled" Value="False"> 
         <Setter Property="UIElement.Opacity" TargetName="PART_Image" Value="0.5" /> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="#FF9E9E9E" /> 
        </Trigger> 
        <DataTrigger Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True"> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}" /> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="#00FFFFFF" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="#00FFFFFF" /> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder" Value="0,0,0,0" /> 
        </DataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=TemplatedParent}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=TemplatedParent}}" Value="True" /> 
          <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="False" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource Mode=TemplatedParent}, FallbackValue=false}" Value="True" /> 
          <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="False" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" /> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder" Value="0,0,0,0" /> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder" Value="#00FFFFFF" /> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsKeyboardFocused, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" /> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder" Value="0,0,0,0" /> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder" Value="#00FFFFFF" /> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsPressed, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Panel.Background" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" /> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder" Value="0,0,0,0" /> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsInControlGroup, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}" /> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="False" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
        </MultiDataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

有一個Trigger即設置RibbonTwoLineText.HasTwoLines附加屬性,與上述我們刪除了。正是這一部分:

<DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Large"> 
    <Setter Property="FrameworkElement.MinWidth" Value="44" /> 
    <Setter Property="FrameworkElement.Height" Value="66" /> 
    <Setter Property="FrameworkElement.MinHeight" TargetName="Grid" Value="26" /> 
    <Setter Property="RibbonTwoLineText.HasTwoLines" TargetName="TwoLineText" Value="True" /> 
</DataTrigger> 

那裏,<Setter Property="RibbonTwoLineText.HasTwoLines" TargetName="TwoLineText" Value="True" />行是罪魁禍首。

最終結果:

endresult

注:我使用的是不同的圖標。 :)

+0

謝謝@Szabolcs。你的解決方案有效 – Hondaputha