2013-04-09 91 views
4

我想改变我的按钮的背景图像其他一些图像,我遇到了一些错误。 这是我对我的XAML代码:如何在C#WPF代码中更改设置按钮的背景图像?

<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中的错误是“文件‘图片\ logo.png’不是一部分 任何人都可以帮我解释一下,谢谢

+1

你能否证实在Visual Studio项目文件“图像\ logo.png”是否被incuded。如果是,您是否也可以在其属性选项卡上确认其生成操作已设置为资源? – Kohanz 2013-04-09 02:36:10

+0

我该如何设置Build Action属性?我似乎无法找到它。该文件 – Jaz 2013-04-09 02:41:43

+0

单击鼠标右键,选择属性 – Kohanz 2013-04-09 02:43:17

回答

13

在构建动作,你可以标记的图像文件的内容或资源。在ImageBrush中使用图像的语法根据您选择的语法而有所不同。

这里是标记为内容一个图像文件。

Image, marked as content

要设置按钮背景该图像使用下面的代码。

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

这里是标记为资源的图像文件。

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; 
+0

我只有一个问题。无法找到类型或名称空间名称“StreamResourceInfo”。(你是否缺少使用指令或程序集引用) – Jaz 2013-04-09 06:34:20

+0

这是一个常见的C#编译器错误。你需要添加一个使用System.Windows.Resources;到您的代码窗口的顶部。 – 2013-04-09 07:37:54

1

如果没有包含,请在项目中包含文件“Image \ Logo.png”。然后通过访问该文件的属性选项卡将其构建操作设置为“资源” (右键点击)。

Setting action to build resource

而且,我不知道你想在按钮的Click处理程序做什么。您已经在XAML中设置了背景图像。除非您将它设置为Click处理程序中的另一个图像,否则不需要该代码。

+0

是的,它的资源下已经..但现在没有错误,但我不能再看到主窗口上的按钮。 – Jaz 2013-04-09 02:50:11

2

我给一个代码段下面,assing在代码片段中提到的按钮或切换按钮的风格,那么你就已经改​​变的背景下通过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>