【问题标题】:Creating disabled state for my PNG image button为我的 PNG 图像按钮创建禁用状态
【发布时间】:2011-12-15 23:14:53
【问题描述】:

我正在研究工具栏控件,需要想出某种效果来使按钮变灰之类的。

所以,假设我有 PNG 图标,我想以某种方式“变色”它们。这可以通过 XAML 实现吗?还是我需要为此编写代码?有什么指点吗?

【问题讨论】:

    标签: c# silverlight xaml


    【解决方案1】:

    您可以使用逐像素滤镜,正如 Christian Graus 在他的 Image Processing for Dummies with C# and GDI+ Part 1 - Per Pixel Filters (Download source) 中所展示的那样:

    unsafe
    {
        byte * p = (byte *)(void *)Scan0;
    
        int nOffset = stride - b.Width*3;
    
        byte red, green, blue;
    
        for(int y=0;y < b.Height;++y)
        {
            for(int x=0; x < b.Width; ++x )
            {
               blue = p[0];
               green = p[1];
               red = p[2];
    
               p[0] = p[1] = p[2] = (byte)(.299 * red 
                   + .587 * green 
                   + .114 * blue);
    
               p += 3;
           }
           p += nOffset;
       }
    }
    

    有关更多示例和其他过滤器,请参阅链接页面。

    【讨论】:

    • 哎呀!我没看到那个标签!然而,在网上四处寻找之后,我找不到任何地方明确说你不能一起使用它们。
    【解决方案2】:

    当 Button.IsEnabled 为 false 时,只需将图像的不透明度设置为 30% 或 50%。

    编辑:我想您可以将 Image.Source 属性更改为禁用的图像文件。有几种方法可以做到这一点:拥有两个图像元素并将可见性属性绑定到按钮的 IsEnabled 属性;通过值转换器运行 Image.Source 属性;或在 IsEnabled 属性更改时使用 Blend 触发器更改 Source 属性。

    【讨论】:

    • 颜色仍然存在,我不希望这样
    • 那么您需要使用 XAML 资源而不是 PNG。这是 XAML 资源优于静态图像文件的几个原因之一。
    • 我的设计师不知道如何使用 XAML。没有办法在 SL 中更改图像?
    • 您也许可以对像素做一些事情(例如在代码中获取图像,将其转换为 WriteableBitmap,将 WriteableBitmap.Pixels 数组过滤为灰度,然后将该图像换成原版),但这是相当多的工作。一种 CPU 密集度较低的方法(代码较少,因此出错的可能性较小)是我在编辑中描述的方法,其中您有一个常规 PNG 和一个为每个按钮禁用的 PNG,然后适当地交换它们。
    • 我首先想到了这一点,但并不希望所有 50 多个文件都放在首位。在我看来,保留 2 个副本是一种更需要维护的方法。
    猜你喜欢
    • 2018-07-22
    • 2021-06-01
    • 2013-01-20
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多