градиент серебряного света - PullRequest
0 голосов
/ 22 октября 2009

Мне было интересно, есть ли способ программно изменить цвет стоп-градиента, указанный в XAML. Например:

<Rectangle Width="1280" Height="1024">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            <GradientStop Color="Black" Offset="0.0" />
            <GradientStop Color="White" Offset="0.25" />
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

Когда я нажимаю кнопку на моем экране, я хочу изменить «черный» градиентный стоп на «красный». Любые предложения

Ответы [ 4 ]

1 голос
/ 22 октября 2009

Добавьте атрибут x.Name к градиентной остановке в XAML. Затем вы можете получить доступ к нему по имени в коде позади.

<GradientStop Color="Black" Offset="0.0" x:Name="MyStop" />

тогда ваш код будет

MyStop.Color=Colors.Red;

Вам также следует посмотреть на это с помощью диспетчера визуальных состояний и действия GoToState при нажатии - тогда вы можете сделать это без кода. Вы не должны смешивать код с дизайном - дизайн (цвет, информация о градиенте) должен храниться в XAML и использовать ваш код для логики.

1 голос
/ 22 октября 2009

Я понял это. Вот код в C #:

        Rectangle rect = new Rectangle();
        GradientStop gs_black = new GradientStop();
        GradientStop gs_white = new GradientStop();
        LinearGradientBrush lgb = new LinearGradientBrush();

    private void cb_test_Click(object sender, RoutedEventArgs e)
    {
        rect.Width = 1280;
        rect.Height = 1024;

        gs_black.Offset = 0;
        gs_black.Color = Color.FromArgb(255, 0, 0, 0);

        gs_white.Offset = .25;
        gs_white.Color = Color.FromArgb(255, 255, 255, 255);


        lgb.StartPoint = new Point(0, 0);
        lgb.EndPoint = new Point(0, 1);

        lgb.GradientStops = new GradientStopCollection();

        lgb.GradientStops.Add(gs_black);
        lgb.GradientStops.Add(gs_white);

        rect.Fill = lgb;

        canvasname.Children.Add(rect);
    }

  private void cb_change_color_Click(object sender, RoutedEventArgs e)
    {
        lgb.GradientStops.Remove(gs_black);
        gs_black.Offset = 0;
        gs_black.Color = Color.FromArgb(255, 0, 255, 0);
        lgb.GradientStops.Add(gs_black);

    }
0 голосов
/ 06 июля 2011

Чтобы изменить цвет GradientStop, используемого в ресурсе, вам нужно использовать ключ x: например,

(this.Resources["xKeyName"] as LinearGradientBrush).GradientStops[0].Color = Color.FromArgb(255, 69, 69, 69);

Это установит цвет для первого GradientStop в следующем ресурсе UserControl

<UserControl.Resources>
    <LinearGradientBrush x:Key="xKeyName">
        <GradientStop Offset="0" /><!-- Colorset via code-behind -->
        <GradientStop Color="Black" Offset="1.0" />
    </LinearGradientBrush>
</UserControl.Resources>
0 голосов
/ 25 октября 2009

Использование '<' GradientStop Color = "Black" Offset = "0.0" x: Name = "MyStop" /> сработало. Я искал эту тему в Интернете, и многие люди говорили, что это невозможно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...