programing

WPF 버튼에 이미지 추가

stoneblock 2023. 5. 29. 09:16

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" 예외에 Markup.XamlParseException'이(가) 있습니다.

해결책은 무엇일까?

'누락된' 이미지의 경우 고려해야 할 몇 가지 사항이 있습니다.

  1. XAML이 리소스를 찾을 수 없는 경우 리소스를 무시할 수 있습니다(슬롯하지 않을 때).XamlParseException)

  2. 리소스를 올바르게 추가하고 정의해야 합니다.

    • 예상되는 위치에 프로젝트에 존재하는지 확인합니다.

    • 프로젝트를 리소스로 사용하여 빌드되었는지 확인합니다.

      (오른쪽 버튼 → 속성 → BuildAction = 'Resource' 클릭)

스니펫

비슷한 경우에 시도해야 할 또 다른 방법은 이미지(또는 다른 리소스)를 재사용하는 데도 유용합니다.

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>

그건 작동할 거야.그러나 프로젝트의 리소스에 이미지를 추가해야 합니다!

텍스트를 오버레이하려면 버튼의 배경을 이미지로 설정할 수 있습니다.

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

이미지 소스 구문을 주의하십시오.도움말은 이 질문을 참조하십시오.

저도 같은 문제가 있었습니다.저는 다음 코드를 사용하여 수정했습니다.

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

참고: 속성 창에서 이미지의 빌드 작업은 다음과 같아야 합니다.Resource.

여기에 이미지 설명 입력

컨텐츠 템플릿 사용:

<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>

또한 Resources(리소스) 의 Access Modifier(액세스 수정자)를 'Public(공용)'으로 설정해야 했습니다. 기본적으로 내부로 설정되어 있으며 아이콘은 설계 모드에서만 표시되고 응용 프로그램을 실행할 때는 나타나지 않았습니다.

언급URL : https://stackoverflow.com/questions/17515631/add-an-image-in-a-wpf-button