2013-07-07 37 views
42

tôi đã cố gắng giải pháp này:Thêm một hình ảnh trong một nút WPF

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

Nhưng tôi có thể nhìn thấy hình ảnh chỉ trong cửa sổ dự án, khi tôi khởi động chương trình nó biến mất.

Nếu tôi cố gắng này:

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; 

tôi nhận được một " 'System.Windows.Markup.XamlParseException' trong PresentationFramework.dll" ngoại lệ.

Bạn có thể giúp tôi tìm giải pháp không? Cảm ơn.

+1

Hình ảnh của bạn có được định nghĩa là 'Tài nguyên' trong thuộc tính không? (nhấp chuột phải vào nó -> properties -> Build Action = 'Resource') –

+0

Cảm ơn! Bạn đưa tôi đi đúng hướng: tôi kéo và thả hình ảnh trong Solution Explorer và bây giờ tôi có thể thấy nó :) – Marco

Trả lời

60

Trong trường hợp của một 'thiếu' hình ảnh có một số điều cần xem xét:

  1. Khi XAML không thể xác định vị trí một nguồn tài nguyên nó có thể bỏ qua nó (khi nó sẽ không ném một XamlParseException)

  2. Các tài nguyên phải được bổ sung đúng cách và định nghĩa:

    • chắc chắn rằng nó tồn tại trong dự án của bạn, nơi dự kiến.

    • Đảm bảo nó được xây dựng với dự án của bạn dưới dạng Tài nguyên.

      (Nhấp chuột phải -> Properties -> BuildAction = 'Resource')

Snippet

Một điều để thử trong trường hợp tương tự, mà cũng hữu ích cho việc tái sử dụng của hình ảnh (hoặc bất kỳ tài nguyên nào khác):

Xác định Hình ảnh của bạn dưới dạng Resourc e trong XAML của bạn:

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

Và sau đó sử dụng nó trong kiểm soát mong muốn của bạn (s):

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

Tôi nghĩ bạn sẽ phải đặt dấu ngoặc kép như

+0

đường dẫn nguồn có thể thử

23

Vui lòng thử dưới đây XAML đoạn mã

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

Trong các yếu tố XAML là trong cây structure.So bạn phải thêm sự kiểm soát con để phụ huynh kiểm soát của nó. Đoạn mã dưới đây cũng hoạt động tốt. Đặt tên cho Lưới gốc XAML của bạn là '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> 

nên làm việc. Nhưng nhớ lại rằng bạn phải có hình ảnh được thêm vào tài nguyên trên dự án của bạn!

4

Bạn có thể đặt nền của nút để hình ảnh nếu sau đó bạn muốn che phủ văn bản.

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

Xem cú pháp Nguồn hình ảnh, xem this question để được trợ giúp.

1

Hãy thử 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

Tôi cũng có cùng một vấn đề. Tôi đã sửa nó bằng cách sử dụng đoạn mã sau.

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

Lưu ý: Hãy chắc chắn rằng việc xây dựng hành động của hình ảnh trong cửa sổ tài sản, nên Resource.

enter image description here

Các vấn đề liên quan