在WPF按钮中添加图像

Mar*_*rco 55 c# wpf image button

我试过这个解决方案:

<Button>
    <StackPanel>
        <Image Source="Pictures/img.jpg" />
        <TextBlock>Blablabla</TextBlock>
    </StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)

但我只能在项目窗口中看到图像,当我启动程序时它会消失.

如果我试试这个:

  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;
Run Code Online (Sandbox Code Playgroud)

我在PresentationFramework.dll中遇到"'System.Windows.Markup.XamlParseException'"异常.

解决办法是什么?

Ron*_*B.I 73

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

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

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

    • 确保项目中存在预期的位置.

    • 确保它是以项目作为资源构建的.

      (右键单击→属性→BuildAction ='资源')

片段

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

将您的图像定义为XAML中的资源:

<UserControl.Resources>
     <Image x:Key="MyImage" Source.../>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

然后在您想要的控件中使用它:

<Button Content="{StaticResource MyImage}" />
Run Code Online (Sandbox Code Playgroud)

  • 我认为你必须使用双引号,如<Button Content ="{StaticResource MyImage}"/>而不是content = {...}. (2认同)
  • 我尝试了你的第二种方法,但仍然出现此错误。“在类型‘UserControl’中找不到可附加属性‘资源’。” (2认同)

Vim*_* CK 26

请尝试以下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>
Run Code Online (Sandbox Code Playgroud)

在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);
Run Code Online (Sandbox Code Playgroud)


小智 8

使用:

<Button Height="100" Width="100">
  <StackPanel>
    <Image Source="img.jpg" />
    <TextBlock Text="Blabla" />
  </StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)

它应该工作.但请记住,您必须在项目的资源中添加一个图像!


kjh*_*jhf 6

如果您想要叠加文本,可以将按钮的背景设置为图像.

<Button>
   <Button.Background>
     <ImageBrush ImageSource="/AssemblyName;component/Pictures/img.jpg"/>
   </Button.Background>
   <TextBlock>Blablabla</TextBlock>
</Button>
Run Code Online (Sandbox Code Playgroud)

注意图像源语法.请参阅此问题以获取帮助.


Ali*_*sad 6

我也有同样的问题。我已经使用以下代码修复了它。

        <Button Width="30" Margin="0,5" HorizontalAlignment="Stretch"  Click="OnSearch" >
            <DockPanel>
                <Image Source="../Resources/Back.jpg"/>
            </DockPanel>
        </Button>
Run Code Online (Sandbox Code Playgroud)

注意:确保属性窗口中图像的构建操作应为Resource.

在此处输入图片说明