我想创建带有图像和文本的按钮。例如,我将为“浏览文件夹”和“导入”等按钮使用不同的图像和文本。
其中一种选项是使用模板。我查看了类似的问题
但是否有办法在不使用依赖属性或其他类的情况下绑定图像的来源?
我想创建带有图像和文本的按钮。例如,我将为“浏览文件夹”和“导入”等按钮使用不同的图像和文本。
其中一种选项是使用模板。我查看了类似的问题
但是否有办法在不使用依赖属性或其他类的情况下绑定图像的来源?
不必那么复杂。只需在按钮中放置一个StackPanel就可以实现:
<Button>
<StackPanel>
<TextBlock>My text here</TextBlock>
<Image Source="some.jpg" Stretch="None" />
</StackPanel>
</Button>
然后你可以配置 StackPanel 控制文本的位置、对齐方式等等。
我添加了一些内容以使它们排列整齐
<Button>
<StackPanel Orientation="Horizontal">
<Image Source="/ApplicationName;component/Images/MyImage.ico"/>
<Label Padding="0">My Button Text</Label>
</StackPanel>
</Button>
HorizontalAlignment="Stretch"
无效。顺便说一句,WPF 很不可预测且愚蠢。 - saidfagan <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>
</Button>
TemplateBinding
放在哪里呢?绑定到哪个属性上呢? - gehho在Sean的答案中添加了Stretch="Uniform"来解决图片最初大于按钮大小的情况(这是BrainSlugs83在评论中提到的问题,我也遇到了)。更多Stretch选项的详细信息请参见MSDN。
<Button>
<StackPanel Orientation="Horizontal">
<Image Source="/ApplicationName;component/Images/MyImage.ico" Stretch="Uniform"/>
<Label Padding="0">My Button Text</Label>
</StackPanel>
</Button>
想把这个作为评论添加到BrainSlugs83的答案下面,但由于缺乏积分而无法实现,同时也被拒绝编辑Sean的答案。
StackPanel
的Orientation
设置为Horizontal
以使它们侧边对齐。请注意,如果您使用的是Grid
而不是StackPanel
,则必须通过调整边距在水平方向上将图像和文本居中到按钮上(因此,StackPanel
是最好的选择)。 - The Muffin Man