如何通过C#代码更改自定义WPF控件中的BitmapEffect

问题描述:

我有一个自定义控件类型,如:<Grid> ... </Grid>和Grid.BitmapEffect属性。如何通过C#代码(例如事件)在此控件(网格)中更改BitmapEffetc?如何通过C#代码更改自定义WPF控件中的BitmapEffect

代码示例 - 自定义控件的一部分:

[...] 
<Grid Background="#FFE5AA"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="62*"/>    
     <RowDefinition Height="15*"/> 
     <RowDefinition Height="23*"/> 
    </Grid.RowDefinitions> 

    <Grid.BitmapEffect> 
     <OuterGlowBitmapEffect GlowColor="#459E5A" GlowSize="13" Noise="0" Opacity="0.9" /> 
    </Grid.BitmapEffect> 

    <Border Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" BorderBrush="#F5B903" BorderThickness="1,1,1,1" > 
    </Border> 
[...] 

然后在Window.xaml:

<controls:MyControl Name="Control1" Cursor="Hand" MouseDown="Control1_MouseDown" /> 

然后在C#:

private void Control1_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    //there i want to change Control1.BitmapEffect 
} 

好的,我明白了!我添加了一个DepencyProperty'GlowSize',并通过它简单地改变发光的大小。 :)完美的作品。

myGrid.BitmapEffect = null; 

PS:请注意, BitmapEffect被认为是过时的,并且th应该使用Effect


下面是根据您的样本为例,其工作完全正常(在这里我的机器上):正如我在网格内单击很快,效果消失。

XAML:

<Window x:Class="WpfCsApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 

<Grid Background="#FFE5AA" Margin="10" MouseDown="Grid_MouseDown" x:Name="myGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="62*"/> 
     <RowDefinition Height="15*"/> 
     <RowDefinition Height="23*"/> 
    </Grid.RowDefinitions> 
    <Grid.BitmapEffect> 
     <OuterGlowBitmapEffect GlowColor="#459E5A" GlowSize="13" Noise="0" Opacity="0.9" /> 
    </Grid.BitmapEffect> 
    <Border Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" BorderBrush="#F5B903" BorderThickness="1,1,1,1" > 
     <TextBlock>Test</TextBlock> 
    </Border> 
</Grid> 
</Window> 

代码隐藏:

public partial class Window1 : Window { 
    public Window1() { 
     InitializeComponent(); 
    } 

    private void Grid_MouseDown(object sender, MouseButtonEventArgs e) { 
     myGrid.BitmapEffect = null; 
    } 
} 

在你的榜样,你写的://there i want to change Control1.BitmapEffect。请注意,您需要更改网格的BitmapEffect,而不是Control1的BitmapEffect。

+0

它不起作用。 – Kamilos 2009-12-16 13:23:51

+0

我刚试过,它工作正常。你能提供一个简短的例子来重现这个问题吗? – Heinzi 2009-12-16 14:39:30

+0

好的,看上面。 – Kamilos 2009-12-16 14:51:07

不同的效果在这里列出:Different BitmapEffect