2009-12-16 4 views
0

J'ai un type de contrôle personnalisé comme: <Grid> ... </Grid> et la propriété Grid.BitmapEffect. Comment puis-je changer BitmapEffetc dans ce contrôle (grille) via le code C# (par exemple sur l'événement)?Comment faire pour modifier BitmapEffect dans le contrôle WPF personnalisé via le code C#

Exemple de code - une partie de contrôle personnalisé:

[...] 
<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> 
[...] 

Puis, en Window.xaml:

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

Puis, en C#:

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

Répondre

1

OK, je l'ai! J'ajoutais un DepenseProperty 'GlowSize' et je changeais simplement la taille de la lueur via. :) Fonctionne parfaitement.

2
myGrid.BitmapEffect = null; 

PS: Notez que BitmapEffect est considéré comme obsolète et au Effect devrait être utilisé à la place.


Voici un exemple en fonction de votre échantillon qui fonctionne parfaitement bien (ici sur ma machine): Dès que je clique dans la grille, l'effet disparaît.

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> 

Codebehind:

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

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

Dans votre exemple, vous écrivez: //there i want to change Control1.BitmapEffect. Notez que vous devez modifier le BitmapEffect de la grille , pas le BitmapEffect de Control1.

+0

Cela ne fonctionne pas. – Kamilos

+0

Je viens de l'essayer et ça marche bien. Pouvez-vous fournir un court exemple pour reproduire le problème? – Heinzi

+0

Ok, regardez ci-dessus. – Kamilos

Questions connexes