在WPFbutton中添加图像

我试过这个解决scheme:

<Button> <StackPanel> <Image Source="Pictures/img.jpg" /> <TextBlock>Blablabla</TextBlock> </StackPanel> </Button> 

但是我只能在项目窗口看到图像,当我启动程序时,它就消失了。

如果我尝试这个:

  Image img = new Image(); img.Source = new BitmapImage(new Uri("foo.png")); StackPanel stackPnl = new StackPanel(); stackPnl.Orientation = Orientation.Horizontal; stackPnl.Margin = new Thickness(10); stackPnl.Children.Add(img); Button btn = new Button(); btn.Content = stackPnl; 

我得到了“PresentationFramework.dll”中的“System.Windows.Markup.XamlParseException”exception。

你能帮我find解决办法吗? 谢谢。

在“缺失”图像的情况下,有几件事情需要考虑:

  1. 当Xaml找不到资源时,它可能会忽略它(当它不会抛出XamlParseException

  2. 资源必须正确添加和定义:

    • 确保它存在于您的项目预期的地方。

    • 确保它是与您的项目一起构build的资源。

      (右键 – >属性 – > BuildAction ='资源')

片段

在类似的情况下尝试另一种方法,这对于重用图像(或任何其他资源)也是有用的:

在Xaml中将图像定义为资源:

 <UserControl.Resources> <Image x:Key="MyImage" Source.../> </UserControl.Resources> 

然后在你想要的控制中使用它:

 <Button Content="{StaticResource MyImage}" /> 

请尝试下面的XAML代码片段

 <Button Width="300" Height="50"> <StackPanel Orientation="Horizontal"> <Image Source="Pictures/img.jpg" Width="20" Height="20"/> <TextBlock Text="Blablabla" VerticalAlignment="Center" /> </StackPanel> </Button> 

在XAML元素是树结构。所以你必须将子控件添加到其父控件。 下面的代码片段也工作正常。 为您的XAML根网格命名为“MainGrid”

 Image img = new Image(); img.Source = new BitmapImage(new Uri(@"foo.png")); StackPanel stackPnl = new StackPanel(); stackPnl.Orientation = Orientation.Horizontal; stackPnl.Margin = new Thickness(10); stackPnl.Children.Add(img); Button btn = new Button(); btn.Content = stackPnl; MainGrid.Children.Add(btn); 
 <Button Height="100" Width="100"> <StackPanel> <Image Source="img.jpg" /> <TextBlock Text="Blabla" /> </StackPanel> </Button> 

应该pipe用。 但是,请注意,您必须将图像添加到项目的资源中!

如果要覆盖文本,可以将Button的背景设置为图像。

 <Button> <Button.Background> <ImageBrush ImageSource="/AssemblyName;component/Pictures/img.jpg"/> </Button.Background> <TextBlock>Blablabla</TextBlock> </Button> 

注意图像源语法,看到这个问题的帮助。

试试ContentTemplate:

 <Button Grid.Row="2" Grid.Column="0" Width="20" Height="20" Template="{StaticResource SomeTemplate}"> <Button.ContentTemplate> <DataTemplate> <Image Source="../Folder1/Img1.png" Width="20" /> </DataTemplate> </Button.ContentTemplate> </Button>