2015-12-03 71 views
0

我是xaml的新手。我用相同的事件处理程序做了2个按钮。所以当我点击一个按钮时,它会添加一个图像。问题是,当我点击另一个按钮时,上一个按钮上的图像消失。 当我点击另一个图像时,如何将图像保留在前一个按钮上?使用xaml在按钮上显示图像的问题

<Window.Resources> 
     <Image x:Key="image1" Source="folder\image1.png" /> 
    </Window.Resources> 
    <Grid> 
     <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="185,73,0,0" VerticalAlignment="Top" Width="75" Click="Clickable"/> 
     <Button x:Name="button_Copy" Content="Button" HorizontalAlignment="Left" Margin="315,73,0,0" VerticalAlignment="Top" Width="75" Click="Clickable"/> 
    </Grid> 

//事件处理

private void Clickable(object sender, RoutedEventArgs e) 
    { 
     Button a = (Button)sender; 
     a.Content = FindResource("image1"); 
    } 
+0

是否有必要在相同的事件中做到这一点? – MHSFisher

+0

是的,因为我会有20-30按钮。 – Snowmap

+0

也许如果您尝试任何其他方法而不是您实现的FindResource()。 – MHSFisher

回答

-1

添加x:Shared="False"到您的图像资源。这将创建您的资源的多个实例。阅读更多

  1. Shujaat.net

  2. Daily Dotnet Tips

+0

谢谢!它完美地工作。如果你不介意,我还有另外一个问题。 我的来源实际上是绝对路径。有没有办法让它成为相对路径? – Snowmap

+0

如果答案对您有帮助,请首先将其标记为答案。这可能会帮助你:http://stackoverflow.com/questions/7772163/wpf-absolute-vs-relative-pack-uris – AnjumSKhan

-1

,你可以尝试一下本作产生一个事件:

private void Clickable(object sender, RoutedEventArgs e) 
{ 
    if(sender.Name == "button") 
    { 
     button.Content = FindResource("image1"); 
    } 
    else 
    { 
     button_Copy.Content = FindResource("image1"); 
    } 
} 
+1

如果我有20个按钮怎么办?我必须手动输入这些吗? – Snowmap

0

试试这个。顺便说一句,我认为写一个新的控件Templete更好。

private void Clickable(object sender, RoutedEventArgs e) 
{ 
    Button a = (Button)sender; 

    a.Content = new Image() {Source = new BitmapImage(new Uri(@"folder/image1.png",UriKind.Relative)) }; 
} 
+0

它的工作原理!我真的不知道这种方法,你能向我解释为什么它比图像资源更好吗?另外,你碰巧知道如何制作相对路径?我必须在“... new uri(@”.../image1.png“)中使用绝对路径才能使其工作。 – Snowmap

+0

嘿,@”.../image1.png“已经是相对路径。绝对路径可能就像这个@“C:/xxx/xxx/image1.png”,我认为这个方法和图像资源是一样的,它们都创建了一个新的图像实例,顺便说一下,你能投我的答案吗?并且需要一些声誉 –

+0

更好地使用图像资源将图像文件的“Build Action”设置为“Resource”(在VS的Properties窗口中),不要将它们复制到输出目录,并通过[WPF资源文件包URI](https://msdn.microsoft.com/en-us/library/aa970069(v = vs.100).aspx#Resource_File_Pack_URIs ___ Local_Assembly)like'new Uri(“pack:// application :, ,/ folder/image1.png“)'这是在WPF应用程序中加载图像的首选方式(在代码后面)。 – Clemens