【问题标题】:Issues with displaying images on buttons with xaml使用 xaml 在按钮上显示图像的问题
【发布时间】:2015-12-03 13:15:15
【问题描述】:

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

   <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");
   }

【问题讨论】:

  • 是否有必要在相同的事件中这样做?
  • 是的,因为我会有 20-30 个按钮。
  • 也许如果你尝试任何其他方法而不是你实现的 FindResource()。
  • 其他方法是什么?

标签: c# wpf xaml


【解决方案1】:

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

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)) };
}

【讨论】:

  • 有效!我真的不知道这种方法,你能解释一下为什么它比图像资源更好吗?另外,您碰巧知道如何制作相对路径吗?我必须在 "...new uri(@".../image1.png" 中使用绝对路径才能使其正常工作。
  • 嘿,@".../image1.png" 已经是相对路径了。绝对路径可能像这样@"C:/xxx/xxx/image1.png"。我认为这种方法与图像资源相同,它们都创建了一个新的图像实例。顺便说一句,你能投票给我的答案吗?我是新来的,需要一些声誉
  • 更好地利用图片资源。将图像文件的Build Action设置为Resource(在VS的属性窗口中),不要将它们复制到输出目录,通过WPF Resource File Pack URInew Uri("pack://application:,,,/folder/image1.png")一样加载它们。这是在 WPF 应用程序中加载图像的首选方式(在代码后面)。
【解决方案2】:

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

  1. Shujaat.net

  2. Daily Dotnet Tips

【讨论】:

  • 谢谢!它完美地工作。如果你不介意的话,我还有一个问题。 我的源实际上是在绝对路径中。有没有办法让它成为相对路径?
  • 如果答案对您有帮助,请先将其标记为答案。这可能会对您有所帮助:stackoverflow.com/questions/7772163/…
【解决方案3】:

您可以尝试这样做以产生一个事件:

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

【讨论】:

  • 如果我有 20 个按钮怎么办?我必须手动输入所有这些吗?
猜你喜欢
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多