Arhn - архитектура программирования

c # пытается сделать два цвета в индикаторе выполнения во время выполнения

Я пытаюсь разработать веб-приложение С#, используя silverlight-5.

Мне нужно создать индикатор выполнения, который будет иметь два цвета: зеленый (до некоторого процента), а затем красный, который будет выполняться динамически с помощью некоторых манипуляций с данными в С#.

Я хочу сделать его из двух цветов с некоторым процентом зеленого и красного цвета (процент будет определен во время выполнения). Я прочитал несколько документов, но мне было сложно их понять.

Может ли кто-нибудь помочь мне написать код на С#? (Или, если этот индикатор выполнения не меняет цвет по значению, взятому во время выполнения, то может кто-нибудь написать простой код для создания пользовательского индикатора выполнения, меняющего цвет во время выполнения в соответствии с изменяющимися значениями во время выполнения). Было бы большой помощью. Спасибо

Вероятно, я предполагаю, что код будет написан на C#, потому что в xaml соотношение цветов будет фиксированным, но процент этих двух цветов должен измениться в соответствии со значениями данных, полученными во время выполнения в коде C#

Примечание. Я разрабатываю веб-приложение с использованием Silverlight и С#.

поэтому код должен быть написан в теле следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace B
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }


    }
}

  • Плохая попытка и усилия по исследованию t .. ....... 10.04.2014
  • @Sayse Но мне было трудно их понять. Я хочу что-то простое для понимания. 10.04.2014
  • @Sayse Это приложение WPF, я работаю в приложении Silverlight. 10.04.2014
  • Из того, что я могу сказать, это то же самое, даже в документации по стилю индикатора выполнения Silverlight есть пример того, как это делается. 10.04.2014
  • @ Скажи, но на С# ничего не написано. потому что цвет будет определяться в коде С# во время выполнения. Не могли бы вы помочь мне там? 10.04.2014
  • @ Скажи, что в Silverlight это невозможно, я думаю, все варианты предназначены для форм Windows. Если мой поиск плохой, пожалуйста, докажите это. Спасибо. 10.04.2014

Ответы:


1

Вы можете установить свойство Foreground для использования LinearGradientBrush, которое динамически настраивается в вашем коде программной части.

<ProgressBar x:Name="ThresholdIndicator"/>

Код программной части:

public MainPage()
{
    InitializeComponent();
    m_thresholdBrush = new LinearGradientBrush(){
                           MappingMode = BrushMappingMode.Absolute};
    GradientStop colorLeftOfThreshold =  new GradientStop(){
                                         Color = Colors.Green,
                                         Offset = 1};
    GradientStop colorRightOfThreshold = new GradientStop(){
                                         Color = Colors.Red,
                                         Offset = 1};
    m_thresholdBrush.GradientStops.Add(colorLeftOfThreshold);
    m_thresholdBrush.GradientStops.Add(colorRightOfThreshold);
    ThresholdIndicator.Foreground = m_thresholdBrush;
    ThresholdIndicator.SizeChanged += (s,e)=>UpdateThresholdBrush();

    //this.ThresholdRatio is your dynamic green/red threshold
    this.ThresholdRatioChanged += (s,e)=>UpdateThresholdBrush();

    UpdateThresholdBrush();
}
private LinearGradientBrush m_thresholdBrush;
private void UpdateThresholdBrush()
{
    m_thresholdBrush.EndPoint = new Point(GetX(), 0);
}
private double GetX()
{
    return this.ThresholdRatio * ThresholdIndicator.ActualWidth;
}

Обратите внимание, что я меняю только EndPoint, два GradientStop всегда находятся в конечной точке.

[Изменить] Хорошо, я вижу, что вы боретесь с this.ThresholdRatio и измененным событием, это должно делать:

public double ThresholdRatio
{
    get { return (double) GetValue( ThresholdRatioProperty ); }
    set { SetValue( ThresholdRatioProperty, value ); }
}

public static readonly DependencyProperty ThresholdRatioProperty =
    DependencyProperty.Register( "ThresholdRatio", typeof(double),
    typeof( MainPage), new PropertyMetadata(HandleThresholdRatioChanged) );

private static void HandleThresholdRatioChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    ((MainPage)d).RaiseThresholdRatioChanged();
}

private void RaiseThresholdRatioChanged()
{
    var handlers = ThresholdRatioChanged;
    if (handlers!=null) handlers(this,EventArgs.Empty);
}

public event EventHandler ThresholdRatioChanged;
10.04.2014
  • спасибо, позвольте мне проверить это, скоро придет, чтобы отметить его один раз, если он работает :) 10.04.2014
  • что это за ThresholdRatioChanged и ThresholdRatio, они кажутся разными? и нигде не инициализировался. TСпасибо 10.04.2014
  • @ user234839: вы сказали, что у вас есть какое-то (динамически изменяющееся) соотношение, которое определяет точное положение, когда цвет должен переключаться на красный... ...поэтому я решил предположить существование this.ThresholdRatio ...и соответствующего ChangedEvent. 11.04.2014
  • вы имеете в виду, что этот thresholdRatioChanged должен быть объявлен следующим образом: public event Action thresholdRatioChanged; вверху (поскольку компилятор не распознает, это дает ошибку). 11.04.2014
  • да. Вот страница на msdn о событиях в SL 11.04.2014

  • 2

    Если вам не нужно использовать индикатор выполнения, то я думаю, что вам лучше создать собственное представление, например, с элементами управления, а затем определить для него шаблон данных, что-то вроде этого:

    XAML

     <ItemsControl x:Name="ic"
                          BorderBrush="Black" 
                          BorderThickness="2" 
                          Background="Gray" 
                          ItemsSource="{Binding}" 
                          ItemTemplate="{StaticResource test1}" 
                          Height="100" 
                          Width="400">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
    

    ШАБЛОН ДАННЫХ

    <DataTemplate x:Key="test1">
                <TextBlock Background="{Binding Color}" 
                           Text="{Binding}" 
                           VerticalAlignment="Center"
                           Padding="2">
                    <TextBlock.Width>
                        <MultiBinding Converter="{StaticResource myMultiMarketConverter}">
                            <Binding Path="MarketShare"/>
                            <Binding ElementName="ic" Path="Width" />
                        </MultiBinding>
                    </TextBlock.Width>
                    <TextBlock.Height>
                        <Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}" />
                    </TextBlock.Height>
                </TextBlock>
            </DataTemplate>
    
    10.04.2014
  • но С# за этим стоит? Процент этого зеленого цвета и красной цветной полосы будет меняться во время выполнения. Как я буду обрабатывать это в С#? 10.04.2014
  • @ Pompair: MultiBinding недоступен в SL. Как этот ItemsControl должен быть подходящей заменой ProgressBar? 10.04.2014
  • @Martin Мартин, ты прав, даже если он не поддерживает System.Drawing. Не могли бы вы дать мне альтернативу для достижения индикатора выполнения с двумя цветами в соответствии со значением, назначенным динамически? 10.04.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..