2010-04-28 75 views

回答

4

号?你需要一个DependencyProperty。当然,你也可以定义一个普通类,它包含两个属性:TextImageSourceUri,然后使用一个DataTemplate来渲染这个类的实例,但这将会写更多的代码,并且它有点“臭”。

您不想使用依赖属性或自定义类的原因是什么?

+0

唯一的原因是我想知道是否有任何其他简单的方法,或者你可以说'没有代码'的方式来做到这一点。使用texblock我可以使用我想知道为什么我不能对图像的Source属性做同样的事情? – Archie 2010-04-28 07:29:52

+0

但是**你会把那个'TemplateBinding'放在哪里?并**你会绑定哪个属性? – gehho 2010-04-28 07:42:16

+0

我可以使用'标签'属性来绑定它吗? – Archie 2010-04-28 07:45:37

36

它不必那么复杂。作为东西放在一个StackPanel一个按钮内部会做的伎俩一样简单:

<Button> 
    <StackPanel> 
    <TextBlock>My text here</TextBlock> 
    <Image Source="some.jpg" Stretch="None" /> 
    </StackPanel> 
</Button> 

然后,你可以配置的StackPanel控制在文本应该出现,对齐等

+0

好的,但你如何设置下划线字符?如果我在这里输入“_My text”,它会使下划线和alt + M不再起作用。那么你如何得到回来? – BrainSlugs83 2013-12-18 02:28:19

+0

此外,你如何获得它缩小图像,使按钮不会爆炸到图像的大小(即如果我有一个图像是40×40和一个按钮的任何大小的按钮 - 我不想手动设置 - 我如何让图像缩小到合适的大小,而不是炸掉我的按钮,超级大? – BrainSlugs83 2013-12-18 02:29:24

+0

我想补充一点,你可能想要将'StackPanel'的'Orientation'设置为'Horizo​​ntal'来让它们排列在一起。请注意,如果您使用网格而不是StackPanel,则必须使用边距进行播放以将图像和文本居中放置在按钮上(因此,堆叠面板是要走的路)。 – 2015-03-06 00:17:15

13

我增加了一些东西排列起来很好

<Button> 
    <StackPanel Orientation="Horizontal"> 
     <Image Source="/ApplicationName;component/Images/MyImage.ico"/> 
     <Label Padding="0">My Button Text</Label> 
    </StackPanel> 
</Button> 
+0

那么,这给我一个正常的按钮标签(即与Alt +信热键) - 我测试它点击按钮,当我按下正确的组合。 - 现在我只需要弄清楚如何将我的图像缩小到按钮的大小,并且不会导致按钮变得很大。 – BrainSlugs83 2013-12-18 02:36:15

6
<Button> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="Resources/add.png" Stretch="None" /> 
      <TextBlock Margin="5,0,0,0">Add</TextBlock> 
     </StackPanel> 
    </Button> 
4
<Button x:Name="MyCoolButton"Width="200" Height="75"> 
<Grid > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Image Source="Pete-Brown-Silverlight-in-Action.png" Margin="5" Grid.Column="0" /> 
    <StackPanel Grid.Column="1" Margin="5"> 
     <TextBlock Text="Buy My Book!" FontWeight="Bold" /> 
     <TextBlock Text="Pete is writing THE Silverlight 4 book" TextWrapping="Wrap" /> 
    </StackPanel> 
</Grid> 

0

加入Stretch =“Uniform”如果图像原本大于按钮大小(在他的评论中提到的BrainSlugs83也遇到了问题),肖恩的答案是解决案例。拉伸选项的更多细节在MSDN

<Button> 
    <StackPanel Orientation="Horizontal"> 
     <Image Source="/ApplicationName;component/Images/MyImage.ico" Stretch="Uniform"/> 
     <Label Padding="0">My Button Text</Label> 
    </StackPanel> 
</Button> 

想补充这为BrainSlugs83下的答案注释,但还不能由于缺乏点,并从编辑肖恩的回答拒绝。