2011-11-15 30 views
1

RibbonButtonにLabelが含まれていない場合、LargeImageアイコンの下に空き領域がたくさんあります。テキストを使用する代わりに、画像(幅と高さ)を拡大したいと思います。 しかし、私はそれを行うための解決策を見出しませんでした。Microsoftリボンfor WPF、RibbonButton LargeImageのみ

私が知った唯一の事は、画像を中央に配置するためにマージンを設定することですが、画像を全体の領域に合わせて欲しいと思います。

これに関するコメントはありますか?

答えて

2

テンプレートの編集(使用ブレンドしたり、ブレンドを持っていない場合、このようにそれを行う場合:.NET 4 control default templates without Blend

これは、リボンボタンのスタイルの既定のコントロールテンプレートの一部です:

<ControlTemplate TargetType="{x:Type ribbon:RibbonButton}"> 
    <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}" SnapsToDevicePixels="True"> 
     <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}" Padding="{TemplateBinding Padding}"> 
     <StackPanel x:Name="StackPanel"> 
      <Image x:Name="PART_Image" 
       RenderOptions.BitmapScalingMode="NearestNeighbor" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
       Height="32" Margin="{DynamicResource {ComponentResourceKey ResourceId=LargeImageMargin, TypeInTargetAssembly={x:Type ribbon:Ribbon}}}" Source="{TemplateBinding LargeImageSource}" VerticalAlignment="Center" 
       Width="32"/> 
      <Grid x:Name="Grid" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <ribbon:RibbonTwoLineText x:Name="TwoLineText" HorizontalAlignment="Center" LineStackingStrategy="BlockLineHeight" LineHeight="13" Margin="1,1,1,0" TextAlignment="Center" Text="{TemplateBinding Label}" VerticalAlignment="Top"/> 
      </Grid> 
     </StackPanel> 
     </Border> 
    </Border> 

をあなたのニーズにこれを変更し、あなたが例えば、周囲のボーダーに画像の幅と高さを調整することができます:<:...キー=「TEMP」のControlTemplate X>

<ControlTemplate TargetType="{x:Type ribbon:RibbonButton}"> 
    <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}" SnapsToDevicePixels="True"> 
     <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}" Padding="{TemplateBinding Padding}"> 
     <StackPanel x:Name="StackPanel"> 
      <Image x:Name="PART_Image" 
       RenderOptions.BitmapScalingMode="NearestNeighbor" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
       Stretch="Fill" Height="{Binding ElementName=InnerBorder, Path=ActualHeight}" 
       Margin="{DynamicResource {ComponentResourceKey ResourceId=LargeImageMargin, TypeInTargetAssembly={x:Type ribbon:Ribbon}}}" Source="{TemplateBinding LargeImageSource}" VerticalAlignment="Center" 
       /> 
      <Grid x:Name="Grid" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <ribbon:RibbonTwoLineText x:Name="TwoLineText" HorizontalAlignment="Center" LineStackingStrategy="BlockLineHeight" LineHeight="13" Margin="1,1,1,0" TextAlignment="Center" Text="{TemplateBinding Label}" VerticalAlignment="Top"/> 
      </Grid> 
     </StackPanel> 
+0

ので、私が配置してみました内に配置し、RibbonButtonにテンプレートを追加しました。 イメージは大きくなりましたが、それ以上のホバーエフェクトは利用できません。 もう一度smthngを行う必要がありますか? –

+0

上記のコードよりも多くのコードがControlTemplateにあります。私のスニペットは単なる抜粋です。 完全なコントロールテンプレートを使用する場合、IsmouseOver/Hooverは正常に動作するはずです。 上記の方法でブレンドまたはリンクを使用して、完全なデフォルトコントロールテンプレートを取得します。私はそれが大きすぎると私はこのスレッドを混乱させたくないので、ここに投稿することはできません申し訳ありません... – SvenG

+0

私はそれをありがとう、ありがとう。今私はテンプレート全体を抽出して、今はすべてが機能します。サポートsvenのおかげで! –

関連する問題