我想创建带有图像和文本的按钮。例如,我会为“浏览文件夹”和“导入”等按钮使用不同的图像和文本。 其中一个选项是使用模板。 我看了一下simliar问题带有图像和文字的按钮模板wpf
Creating an image+text button with a control template?
但是有没有通过,我可以像源绑定不使用依赖属性或任何其他类中的任何方法吗?
感谢您会绑定到Image.Source
什么
我想创建带有图像和文本的按钮。例如,我会为“浏览文件夹”和“导入”等按钮使用不同的图像和文本。 其中一个选项是使用模板。 我看了一下simliar问题带有图像和文字的按钮模板wpf
Creating an image+text button with a control template?
但是有没有通过,我可以像源绑定不使用依赖属性或任何其他类中的任何方法吗?
感谢您会绑定到Image.Source
什么
号?你需要一个DependencyProperty。当然,你也可以定义一个普通类,它包含两个属性:Text
和ImageSource
或Uri
,然后使用一个DataTemplate来渲染这个类的实例,但这将会写更多的代码,并且它有点“臭”。
您不想使用依赖属性或自定义类的原因是什么?
它不必那么复杂。作为东西放在一个StackPanel一个按钮内部会做的伎俩一样简单:
<Button>
<StackPanel>
<TextBlock>My text here</TextBlock>
<Image Source="some.jpg" Stretch="None" />
</StackPanel>
</Button>
然后,你可以配置的StackPanel控制在文本应该出现,对齐等
好的,但你如何设置下划线字符?如果我在这里输入“_My text”,它会使下划线和alt + M不再起作用。那么你如何得到回来? – BrainSlugs83 2013-12-18 02:28:19
此外,你如何获得它缩小图像,使按钮不会爆炸到图像的大小(即如果我有一个图像是40×40和一个按钮的任何大小的按钮 - 我不想手动设置 - 我如何让图像缩小到合适的大小,而不是炸掉我的按钮,超级大? – BrainSlugs83 2013-12-18 02:29:24
我想补充一点,你可能想要将'StackPanel'的'Orientation'设置为'Horizontal'来让它们排列在一起。请注意,如果您使用网格而不是StackPanel,则必须使用边距进行播放以将图像和文本居中放置在按钮上(因此,堆叠面板是要走的路)。 – 2015-03-06 00:17:15
我增加了一些东西排列起来很好
<Button>
<StackPanel Orientation="Horizontal">
<Image Source="/ApplicationName;component/Images/MyImage.ico"/>
<Label Padding="0">My Button Text</Label>
</StackPanel>
</Button>
那么,这给我一个正常的按钮标签(即与Alt +信热键) - 我测试它点击按钮,当我按下正确的组合。 - 现在我只需要弄清楚如何将我的图像缩小到按钮的大小,并且不会导致按钮变得很大。 – BrainSlugs83 2013-12-18 02:36:15
<Button>
<StackPanel Orientation="Horizontal">
<Image Source="Resources/add.png" Stretch="None" />
<TextBlock Margin="5,0,0,0">Add</TextBlock>
</StackPanel>
</Button>
<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>
加入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下的答案注释,但还不能由于缺乏点,并从编辑肖恩的回答拒绝。
唯一的原因是我想知道是否有任何其他简单的方法,或者你可以说'没有代码'的方式来做到这一点。使用texblock我可以使用 我想知道为什么我不能对图像的Source属性做同样的事情? –
Archie
2010-04-28 07:29:52
但是**你会把那个'TemplateBinding'放在哪里?并**你会绑定哪个属性? – gehho 2010-04-28 07:42:16
我可以使用'标签'属性来绑定它吗? – Archie 2010-04-28 07:45:37