有沒有一種方法可以淡化禁用的按鈕中的圖像?例如。 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. 有沒有辦法找出TButtonGroup的哪個按鈕被點擊?
- 2. 有沒有辦法使用按鈕
- 3. 有沒有辦法隱藏/禁用`bsModal`窗口上的`Close`按鈕?
- 4. 有沒有辦法在一個方向上縮放圖像?
- 5. 有沒有辦法在按鈕和文本上方浮動一個加載器?
- 6. 有沒有辦法動態改變一個按鈕的CSS類?
- 7. 有沒有辦法在IME鍵盤上禁用(灰色)「發送」按鈕?
- 8. 有沒有辦法在某個單元上放置按鈕?
- 9. 按鈕沒有被按鈕
- 10. 有沒有辦法訪問QTableView的左上角按鈕?
- 11. 有沒有辦法檢測Droid X上的按鈕?
- 12. asp.net:登錄後有沒有辦法「禁用」瀏覽器的後退按鈕?
- 13. MFC:有沒有辦法沒有On_Bn_Clicked()事件的活動按鈕?
- 14. 有沒有辦法停止進一步的標籤按鈕
- 15. 有沒有辦法知道異常是否被禁用?
- 16. 有沒有辦法禁用標籤?
- 17. 有沒有辦法禁用android市場?
- 18. 有沒有辦法禁用xml警告?
- 19. html/javascript:有沒有辦法動態禁用/啓用圖像地圖區域?
- 20. Java SWT - 禁用按鈕上的圖像
- 21. 有沒有辦法使用php搜索和檢索第一個圖像?
- 22. 有沒有辦法在Android上創建三角形按鈕?
- 23. 有沒有辦法在按鈕上生成報告
- 24. 有沒有辦法做一個選擇框通過點擊一個按鈕
- 25. 有沒有辦法用koa重命名上傳圖像?
- 26. 添加一個圖像按鈕,然後按一下按鈕沒有檢測
- 27. 有沒有辦法只用0和1導入MNIST圖像?
- 28. 有沒有辦法用一個「模式」
- 29. 有沒有辦法在Github的特定分支上禁用rebasing?
- 30. 有沒有辦法禁用UITabBarItem重新加載其第一個視圖?