【发布时间】:2011-11-15 07:10:14
【问题描述】:
如果 RibbonButton 不包含 Label,则 LargeImage 图标下有很多可用空间。我不想使用文本,而是想放大图像(宽度和高度)。 但是,我没有找到解决方案。
我发现的唯一一件事是配置一个边距以便将图像放置在中心,但我希望图像被拉伸以适合整个区域。
有什么相关的吗?
【问题讨论】:
如果 RibbonButton 不包含 Label,则 LargeImage 图标下有很多可用空间。我不想使用文本,而是想放大图像(宽度和高度)。 但是,我没有找到解决方案。
我发现的唯一一件事是配置一个边距以便将图像放置在中心,但我希望图像被拉伸以适合整个区域。
有什么相关的吗?
【问题讨论】:
编辑模板(使用 Blend 或者如果您没有 Blend,则这样做:.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>
根据您的需要更改此设置,例如,您可以将图像的宽度和高度调整为周围的边框:
<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>
【讨论】: