2013-07-07 61 views
42

添加图片我试过这个解决方案:在WPF按钮

<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'”。

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

+1

您的图像在其属性中是否定义为“资源”? (右键单击它 - >属性 - >生成操作='资源') –

+0

谢谢!你把我放在正确的方向:我拖放图像到解决方案资源管理器,现在我可以看到它:) – Marco

回答

60

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

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

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

    • 确保它在你的项目中存在预期的位置。

    • 确保它与您的项目一起构建为资源。

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

Snippet

另一件事在类似案件中尝试,这也是重用有用(或任何其他资源):

将图像定义为资源E在XAML中:

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

并在以后使用它在您所需的控制(S):

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

我认为你将不得不把双引号像

+0

源路径可以尝试

23

请尝试以下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元素树structure.So你有孩子控件添加到父控件中。下面的代码片段也很好。为您的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); 
7
<Button Height="100" Width="100"> 
    <StackPanel> 
    <Image Source="img.jpg" /> 
    <TextBlock Text="Blabla" /> 
    </StackPanel> 
</Button> 

应工作提供一个名称。但是,请注意,您必须将图像添加到项目资源中!

4

您可以设置按钮的背景图片,如果你再要覆盖文本。

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

小心图像源语法,请参阅this question寻求帮助。

1

尝试的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> 
0

我也有同样的问题。我已经通过使用下面的代码解决了它。

 <Button Width="30" Margin="0,5" HorizontalAlignment="Stretch" Click="OnSearch" > 
      <DockPanel> 
       <Image Source="../Resources/Back.jpg"/> 
      </DockPanel> 
     </Button> 

注:确保在属性窗口中的图像的生成操作,应该是Resource

enter image description here