有没有一种方法可以淡化禁用的按钮中的图像?例如。 ICommand.CanExecute = false
?或者我需要使用单独的图像+风格/触发器有没有办法去饱和一个按钮上的图像被禁用?
3
A
回答
6
我对此使用了一种特殊的风格,当按钮被禁用时减少了图像的不透明度(是的,如果按钮绑定到一个命令)。从技术上讲,这是不饱和的,但它看起来相似,它可以帮助你获得你自己的解决方案:
<Style x:Key="buttonImage">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}, AncestorLevel=1}, Path=IsEnabled}" Value="False">
<Setter Property="Image.Opacity" Value="0.25"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
4
这里是去饱和的着色器(Desaturate.fx):
sampler2D inputSampler : register(S0);
/// <summary>The strength of the effect.</summary>
/// <minValue>0</minValue>
/// <maxValue>1</maxValue>
/// <defaultValue>0</defaultValue>
float Strength : register(C0);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 srcColor = tex2D(inputSampler, uv);
float3 rgb = srcColor.rgb;
float3 c = (1 - Strength)*rgb + Strength* dot(rgb, float3(0.30, 0.59, 0.11));
return float4(c, srcColor.a);
}
编译它和.ps文件作为资源添加,然后把它包像这样:
public class Desaturate : ShaderEffect
{
public static readonly DependencyProperty InputProperty = ShaderEffect.RegisterPixelShaderSamplerProperty(
"Input",
typeof(Desaturate),
0);
public static readonly DependencyProperty StrengthProperty = DependencyProperty.Register(
"Strength",
typeof(double),
typeof(Desaturate),
new UIPropertyMetadata(((double)(0D)), PixelShaderConstantCallback(0)));
public Desaturate()
{
PixelShader pixelShader = new PixelShader();
pixelShader.UriSource = new Uri("/So.Wpf;component/Effects/Desaturate.ps", UriKind.Relative);
this.PixelShader = pixelShader;
this.UpdateShaderValue(InputProperty);
this.UpdateShaderValue(StrengthProperty);
}
public Brush Input
{
get
{
return ((Brush)(this.GetValue(InputProperty)));
}
set
{
this.SetValue(InputProperty, value);
}
}
/// <summary>The strength of the effect. 0 is unchanged and 1 is monochrome</summary>
public double Strength
{
get
{
return ((double)(this.GetValue(StrengthProperty)));
}
set
{
this.SetValue(StrengthProperty, value);
}
}
}
然后你可以使用它在XAML这样,实力是绑定,因此NP挂钩它通过触发有效:
<Grid>
<Image Source="http://i.imgur.com/CN63KcN.jpg">
<Image.Effect>
<effects:Desaturate Strength="{Binding ElementName=SaturationSlider, Path=Value}"/>
</Image.Effect>
</Image>
<Slider x:Name="SaturationSlider" Minimum="0" Maximum="1" VerticalAlignment="Bottom"/>
</Grid>
相关问题
- 1. 有没有办法用方法禁用所有按钮?
- 2. 有没有办法找出TButtonGroup的哪个按钮被点击?
- 3. 有没有办法禁用24小时的按钮?
- 4. 作为一个按钮但没有按钮图像的图像
- 5. 有没有办法通过单击按钮禁用ng-repeat?
- 6. 有没有办法使用按钮
- 7. 道场按钮没有被禁用
- 8. 有没有办法隐藏/禁用`bsModal`窗口上的`Close`按钮?
- 9. 有没有办法在一个方向上缩放图像?
- 10. iphone有没有办法让按钮上的图像翻转过来?
- 11. 有没有办法在按钮和文本上方浮动一个加载器?
- 12. 有没有办法动态改变一个按钮的CSS类?
- 13. 有没有办法在IME键盘上禁用(灰色)“发送”按钮?
- 14. 有没有办法在某个单元上放置按钮?
- 15. 有没有办法检测一个键是否被按下?
- 16. 按钮没有被按钮
- 17. 上下文菜单API:有没有办法知道哪个按钮被用来选择一个项目?
- 18. 没办法去完成上的UITextField按钮上班
- 19. 有没有办法从Java中的多个图像创建一个Gif图像?
- 20. 有没有办法检测Droid X上的按钮?
- 21. 有没有办法访问QTableView的左上角按钮?
- 22. 有没有办法以编程方式将视图从一个按钮居中到另一个按钮?
- 23. HttpPost如果提交按钮被禁用方法没有烧制
- 24. AsphyreSphinx - 如何去饱和图像
- 25. asp.net:登录后有没有办法“禁用”浏览器的后退按钮?
- 26. MFC:有没有办法没有On_Bn_Clicked()事件的活动按钮?
- 27. 有没有办法隐藏没有CSS的按钮值?
- 28. 有没有办法禁用android市场?
- 29. 有没有办法禁用xml警告?
- 30. 有没有办法禁用标签?