Как изменить BitmapEffect в пользовательском элементе управления WPF с помощью кода C # - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть пользовательский тип элемента управления, например: <Grid> ... </Grid> и свойство Grid.BitmapEffect. Как я могу изменить BitmapEffetc в этом элементе управления (Grid) с помощью кода C # (например, по событию)?

Пример кода - часть пользовательского элемента управления:

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

Ответы [ 3 ]

2 голосов
/ 16 декабря 2009
myGrid.BitmapEffect = null;

PS: обратите внимание, что BitmapEffect считается устаревшим и вместо него следует использовать Эффект .


Вот пример, основанный на вашем образце, который отлично работает (здесь, на моей машине): как только я нажимаю в Grid, эффект исчезает.

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;
    }
}

В вашем примере вы пишете: //there i want to change Control1.BitmapEffect. Обратите внимание, что вам нужно изменить BitmapEffect Grid , а не BitmapEffect Control1 .

1 голос
/ 21 октября 2011

Здесь перечислены различные эффекты: Различный эффект BitmapEffect

1 голос
/ 16 декабря 2009

ОК, я понял! Я добавил DepencyProperty GlowSize и просто изменил размер свечения через него :) Работает отлично.

...