web-dev-qa-db-ja.com

C#WPFコードでボタンの背景画像を変更/設定するにはどうすればよいですか?

ボタンの背景画像を他の画像に変更しようとしていますが、エラーが発生しました。これは私が私のxamlに持っているコードです:

    <Button x:Name="Button1" Width="200" Height="200" Content="Button1" Margin="0,0,0,400">
        <Button.Background>
            <ImageBrush **ImageSource ="Images/AERO.png"**  ></ImageBrush>
        </Button.Background>
    </Button>

そして私のcs:

    private void Button1_Click_1(object sender, RoutedEventArgs e)
    {
        var brush = new ImageBrush();
        brush.ImageSource = new BitmapImage(new Uri("Images/AERO.png"));
        Button1.Background = brush;
    }

私のxamlでのエラーは、「ファイル 'Images\logo.png'がプロジェクトの一部ではないか、その 'ビルドアクション'プロパティが 'リソース'に設定されていません。誰かが説明を手伝ってくれますか、ありがとう

8
Jaz

ビルドアクションでは、画像ファイルをコンテンツまたはリソースとしてマークできます。 ImageBrushで画像を使用するための構文は、選択した画像によって異なります。

これはcontentとマークされた画像ファイルです。

Image, marked as content

ボタンの背景をこの画像に設定するには、次のコードを使用します。

 var brush = new ImageBrush();
 brush.ImageSource = new BitmapImage(new Uri("Images/ContentImage.png",UriKind.Relative));
 button1.Background = brush;

これはresourceとマークされた画像ファイルです。

Image, marked as resource

ボタンの背景をリソース画像に設定するには、次のコードを使用します。

  Uri resourceUri = new Uri("Images/ResourceImage.png", UriKind.Relative);
  StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri);

  BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream);
  var brush = new ImageBrush();
  brush.ImageSource = temp;

  button1.Background = brush;
15
Walt Ritscher

以下のコードスニペットを提供し、コードスニペットで言及されているスタイルをボタンまたはトグルボタンに割り当てます。その後、変更された背景をXAMLで完全に制御します。他のコーディングは必要ありません。私はすべてのコードを提供しているのではなく、背後にあるロジックを理解しようとしています;)

<Style x:Key="KeyStopButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                                  x:Name="Border"
                                  CornerRadius="1"
                                  BorderThickness="1">
                    <Border.Background>                            
                        <ImageBrush ImageSource= "..\Images\ButtonImages\StopButton.png"  Stretch="Uniform"/>
                    </Border.Background>                        
                    <Border.Effect>                            
                        <DropShadowEffect/>                                
                    </Border.Effect>
                </Border>
                <ControlTemplate.Triggers>                        
                    <Trigger Property="IsPressed" Value="true">
                        <Setter TargetName="Border" Property="Border.Effect" Value="{x:Null}"/>                                                            
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="KeyPlayPauseButtonStyle" TargetType="{x:Type ToggleButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToggleButton">
                <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                                  x:Name="Border"
                                  CornerRadius="1"
                                  BorderThickness="1">
                    <Border.Background>
                        <ImageBrush ImageSource= "..\Images\ButtonImages\PlayButton.png"  Stretch="Uniform"/>
                    </Border.Background>
                    <Border.Effect>
                        <DropShadowEffect/>
                    </Border.Effect>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="true">
                        <Setter TargetName="Border" Property="Border.Background">
                            <Setter.Value>
                                <ImageBrush ImageSource= "..\Images\ButtonImages\PauseButton.png" Stretch="Uniform"/>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
3
Evren Gunay

含まれていない場合は、プロジェクトに「Image\Logo.png」ファイルを含めます。次に、そのファイルのプロパティタブにアクセスして(右クリック)、ビルドアクションを「リソース」に設定します。

Setting action to build resource

また、ボタンのClickハンドラーで何をしようとしているのかわかりません。 XAMLで既に背景画像を設定しています。 Clickハンドラーで別の画像に設定しない限り、そのコードは必要ありません。

1
Kohanz