Development Tip

WPF 단추에 이미지 추가

yourdevel 2021. 1. 6. 20:29
반응형

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. XAML이 리소스를 찾을 수없는 경우 무시할 수 있습니다 (을 throw하지 않을 때 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.

여기에 이미지 설명 입력


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>

또한 리소스 탭액세스 수정 자를 '공개' 로 설정해야한다는 것을 발견 했습니다. 기본적으로 내부로 설정되어 있고 내 아이콘은 디자인 모드에서만 나타나지만 응용 프로그램을 실행할 때는 나타나지 않았습니다.

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

반응형