Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
.NET 4.x

Progressbar в DataGrid WPF

24.11.2015, 19:18. Показов 5440. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, помогите пожалуйста разобраться, появилась такая идея:
- я хочу плавно изменять цвет progressbara в зависимости от его значения. Например:

- Если значение равно 100% (отображать зеленый цвет)

- Если значение равно 50% (отображать оранжевый цвет)

- И на конец если значение меньше 50% ( красный цвет)

Но я хочу сделать это отображение смешиванием цветов... например если 65 % то (мы не получаем насыщенного оранжевого а смешанный цвет зеленый + оранжевый)

Также и с красным медленно перерастающий из оранжевого в насыщенный красный.

Так же столкнулся с еще одной проблемой это отображением его в datagrid, отладчик останавливает мое приложение с ошибкой исключения :

Необработанное исключение типа "System.Windows.Markup.XamlParseExceptio n" в PresentationFramework.dll
Дополнительные сведения: "Предоставление значения для "System.Windows.Baml2006.TypeConverterMa rkupExtension" вызвало исключение.": номер строки "68" и позиция в строке "42".


Я полагаю ошибка из за одного из конвертеров :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Myconverter : MarkupExtension, IMultiValueConverter
    {
        public object Convert (object[] values, Type targetType, object parametr, CultureInfo culture)
        {
            var result = "-";
            double round = 0, round1 = 0;
            if (values[0] != null)
            {
                round = Math.Round((float)values[0]);
                round1 = Math.Round((float)values[1] / 1000);
            }
            if (values.Length == 2) {
 
                 result = string.Format("{0}/{1}", round, round1);   
            }
            return result;
 
        }
 
        public object[] ConvertBack(object values, Type[] targetType, object parametr, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
 
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return new Myconverter();
        }
    }
 
    //=====================================================================================================================
    class resursed : MarkupExtension, IValueConverter
     {
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
       {
          var resul = "-";
         if (value is float)
          {
           var test = (float)value;
           if (test == 100)
           test = test / 100; 
           resul = string.Format("{0:P0}", test);
          }                 
         return resul;
       }
 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
     {
      throw new NotImplementedException();
     }
 
    public override object ProvideValue(IServiceProvider serviceProvider)
     {
      return new resursed();
     }
 
   }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2015, 19:18
Ответы с готовыми решениями:

[WPF] Изменить видимость ProgressBar
Есть UserControl с ProgressBar .Нужно из другого класса при определённых условиях изменить его видимость. Пробовал так: В классе...

DataGrid в WPF
Здравствуйте, возник ряд вопросов связанный с DataGrid в WPF, а именно: 1. Как создать таблицу с двумя столбцами: Text, Combobox. 2....

DataGrid в WPF
У меня восьмая студия, framework 4, но в студии нет datagrid, как его установить? ps не предлагать установить другую студию))

23
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
25.11.2015, 08:40  [ТС]
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"
        x:Class="WpfApplication1.MainWindow"
        mc:Ignorable="d"
        x:Name="mainWindow"
       
        Title="Archive_new" Height="834" Width="627" Icon="positive.ico">
    <!--local:Myconverter x:key ="Myconverter" /-->
    <Window.CommandBindings>
        <CommandBinding Command="Open" Executed="CommandBinding_Open_Executed" />
        <CommandBinding Command="Save" Executed="CommandBinding_Save_Executed"/>
        <CommandBinding Command="Close" Executed="CommandBinding_Close_Executed"/>
    </Window.CommandBindings>
 
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="25"/>
            <RowDefinition Height="292*"/>
        </Grid.RowDefinitions>
 
 
        <Menu>
            <MenuItem Header="File">
                <MenuItem Header="Open" Command="Open"/>
                <MenuItem Header="Save" Command="Save"/>
                <MenuItem Header="Close" Command="Close" />
            </MenuItem>
        </Menu>
        <TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="728" Margin="0,41,-2,0" Grid.Row="1" VerticalAlignment="Top" Width="615" DataContext="{Binding}">
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5" Margin="0,-3,0,-11">
                    <DataGrid x:Name="Testik" Grid.Row="1" DataContext ="{Binding ElementName=mainWindow, Path=List}" ItemsSource="{Binding}" AutoGenerateColumns="False"   IsReadOnly="True" SelectionMode="Single" LoadingRow="Testik_LoadingRow" CanUserDeleteRows="False" CanUserAddRows="True" CanUserResizeRows="False" RowDetailsVisibilityMode="Visible" Margin="-2,2,-1,478" >
 
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="№" Binding="{Binding nk}" IsReadOnly="True"/>
                            <DataGridTemplateColumn Header="Дата\Время">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding t_n, StringFormat={}{0:dd/MM/yyyy HH:MM }}" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <DatePicker SelectedDate="{Binding t_n}" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellEditingTemplate>
                            </DataGridTemplateColumn>
                            <DataGridTextColumn Header="Вес(т)/Длина">
                                <DataGridTextColumn.Binding>
                                    <MultiBinding Converter="{local:Myconverter}">
                                        <Binding Path="P"/>
                                        <Binding Path ="L"/>
                                    </MultiBinding>
                                </DataGridTextColumn.Binding>
                            </DataGridTextColumn>
                            <DataGridTextColumn Header="Ресурс" Binding="{Binding res_v, Converter={local:resursed}}" />
                            <DataGridTemplateColumn Header="Test" Width="20">
                                <DataGridTemplateColumn.CellTemplate >
                                    <DataTemplate>
                                        <ProgressBar Value="res_v"/>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                            <DataGridTextColumn Header="Диаметр верхн.(мм)" Binding="{Binding d_vv, StringFormat=\{0:F2\}}" />
                            <DataGridTextColumn Header="Диаметр нижн.(мм)" Binding="{Binding d_vn, StringFormat=\{0:F2\}}" />
                            <DataGridTextColumn Header="Номер верхнего" Binding="{Binding N_vv}" />
                            <DataGridTextColumn Header="Номер нижнего" Binding="{Binding N_vn}" />
 
                            <DataGridTextColumn Binding="{Binding Pm}" />
                            <DataGridTextColumn Binding="{Binding Pp}" />
                            <DataGridTextColumn Binding="{Binding kal_n}" />
                            <DataGridTextColumn Binding="{Binding kal_v}" />
 
                           
 
                            <DataGridTextColumn Binding="{Binding Frez[0]}" />
                            <DataGridTextColumn Binding="{Binding Frez[1]}" />
                            <DataGridTextColumn Binding="{Binding Frez[2]}" />
                            <DataGridTextColumn Binding="{Binding Frez[3]}" />
 
                            <DataGridTextColumn Binding="{Binding Irez[0]}" />
                            <DataGridTextColumn Binding="{Binding Irez[1]}" />
                            <DataGridTextColumn Binding="{Binding Irez[2]}" />
                            <DataGridTextColumn Binding="{Binding Irez[3]}" />
                        </DataGrid.Columns>
 
 
                        <DataGrid.LayoutTransform>
                            <TransformGroup>
                                <RotateTransform Angle="90"/>
                                <MatrixTransform Matrix="-1,0,0,1,0,0"/>
                            </TransformGroup>
                        </DataGrid.LayoutTransform>
                        <DataGrid.ColumnHeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}"
                                BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <TransformGroup>
                                            <RotateTransform Angle="-90"/>
                                            <ScaleTransform ScaleX="1" ScaleY="-1" />
                                        </TransformGroup>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </DataGrid.ColumnHeaderStyle>
                        <DataGrid.CellStyle>
                            <Style  TargetType="{x:Type DataGridCell}">
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <TransformGroup>
                                            <RotateTransform Angle="-90"/>
                                            <ScaleTransform ScaleX="1" ScaleY="-1" />
                                        </TransformGroup>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </DataGrid.CellStyle>
 
                    </DataGrid>
 
                    <DataGrid x:Name="dataGrid" Grid.Row="2" DataContext ="{Binding ElementName=mainWindow, Path=List1}" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="4,299,0,-183" VerticalAlignment="Top" Width="359" Height="594" AutoGenerateColumns="False" IsReadOnly="True" SelectionMode="Single" CanUserDeleteRows="False" CanUserAddRows="False" CanUserResizeRows="False" RowDetailsVisibilityMode="Visible" RenderTransformOrigin="0.485,0.187">
                        <DataGrid.Columns>
                            
                            <DataGridTextColumn Binding="{Binding nk}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="Nomber" Binding="{Binding N_vn}" />
                            <DataGridTextColumn Binding="{Binding N_vv}" />
                            <DataGridTextColumn Binding="{Binding d_vn, StringFormat=\{0:F2\}}" />
                            <DataGridTextColumn Binding="{Binding d_vv, StringFormat=\{0:F2\}}" />
 
                            <DataGridTemplateColumn Header="t_n">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding t_n}" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <DatePicker SelectedDate="{Binding t_n}" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellEditingTemplate>
                            </DataGridTemplateColumn>
 
                            <DataGridTemplateColumn Header="t_k">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding t_k}" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <DatePicker SelectedDate="{Binding t_k}" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellEditingTemplate>
                            </DataGridTemplateColumn>
 
                            <DataGridTextColumn Binding="{Binding L}" />
                            <DataGridTextColumn Binding="{Binding P}" />
                            <DataGridTextColumn Binding="{Binding Pm}" />
                            <DataGridTextColumn Binding="{Binding Pp}" />
                            <DataGridTextColumn Binding="{Binding kal_n}" />
                            <DataGridTextColumn Binding="{Binding kal_v}" />
                            <DataGridTextColumn Binding="{Binding res_v}" />
 
                            <DataGridTextColumn Binding="{Binding Frez[0]}" />
                            <DataGridTextColumn Binding="{Binding Frez[1]}" />
                            <DataGridTextColumn Binding="{Binding Frez[2]}" />
                            <DataGridTextColumn Binding="{Binding Frez[3]}" />
 
                            <DataGridTextColumn Binding="{Binding Irez[0]}" />
                            <DataGridTextColumn Binding="{Binding Irez[1]}" />
                            <DataGridTextColumn Binding="{Binding Irez[2]}" />
                            <DataGridTextColumn Binding="{Binding Irez[3]}" />
                        </DataGrid.Columns>
                        <DataGrid.LayoutTransform>
                            <TransformGroup>
                                <RotateTransform Angle="90"/>
                                <MatrixTransform Matrix="-1,0,0,1,0,0"/>
                            </TransformGroup>
                        </DataGrid.LayoutTransform>
                        <DataGrid.ColumnHeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}"
                                BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <TransformGroup>
                                            <RotateTransform Angle="-90"/>
                                            <ScaleTransform ScaleX="1" ScaleY="-1" />
                                        </TransformGroup>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </DataGrid.ColumnHeaderStyle>
                        <DataGrid.CellStyle>
                            <Style  TargetType="{x:Type DataGridCell}">
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <TransformGroup>
                                            <RotateTransform Angle="-90"/>
                                            <ScaleTransform ScaleX="1" ScaleY="-1" />
                                        </TransformGroup>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </DataGrid.CellStyle>
                    </DataGrid>
 
                </Grid>
            </TabItem>
        </TabControl>
        <DatePicker HorizontalAlignment="Left" Margin="10,5,0,0" Grid.Row="1" VerticalAlignment="Top" Height="31" Width="102"/>
        <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="31" Margin="479,5,0,0" Grid.Row="1" VerticalAlignment="Top" Width="126"/>
 
        <xctk:DecimalUpDown HorizontalAlignment="Left" Margin="179,7,0,0" Grid.Row="1" VerticalAlignment="Top" Height="29"  Value="1" Increment="1" Maximum="3" Minimum="1"/>
        <Label x:Name="label" Content="Label" HorizontalAlignment="Left" Margin="352,23,0,0" Grid.Row="1" VerticalAlignment="Top"/>
        <Button x:Name="button" Content="OK" HorizontalAlignment="Left" Height="31" Margin="117,5,0,0" Grid.Row="1" VerticalAlignment="Top" Width="57"/>
 
    </Grid>
</Window>
помогите разобраться в чем причина , если закомент. строку :
XML
1
<ProgressBar Value="res_v"/>
То ошибки исключения нет.

Всем спасибо, если нужен весь код могу предоставить

Добавлено через 13 часов 21 минуту
Ошибка решена :

Необработанное исключение типа "System.Windows.Markup.XamlParseExceptio n" в PresentationFramework.dll
Дополнительные сведения: "Предоставление значения для "System.Windows.Baml2006.TypeConverterMa rkupExtension" вызвало исключение.": номер строки "68" и позиция в строке "42".

Пропустил привязку данных

XML
1
  <ProgressBar Value="{Binding res_v"}/>
Помогите разобраться с изменением цветов пожалуйста
0
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
25.11.2015, 09:05  [ТС]
При добавлении текста отображающий проценты, получаю ошибку кто знает решение ?
XML
1
2
3
4
5
6
7
8
<DataGridTemplateColumn Header="Test" >
                                <DataGridTemplateColumn.CellTemplate >
                                    <DataTemplate>
                                        <ProgressBar Name="pbStatus"/>
                                        <TextBlock Text="{Binding ElementName=pbStatus, Path=res_v, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
Ошибка - Свойство "VisualTree" Установлено больше одного раза.
Всем спасибо
0
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
25.11.2015, 16:30
Цитата Сообщение от Dostik Посмотреть сообщение
Ошибка - Свойство "VisualTree" Установлено больше одного раза.
DataTemplate не может содержать 2 элемента внутри себя, объедините ProgressBar и TextBlock в какую нить панель типа стэк панели

Добавлено через 2 минуты
Цитата Сообщение от Dostik Посмотреть сообщение
Помогите разобраться с изменением цветов пожалуйста
Если ты хочешь добавить некоторую дополнительную функциональность, то лучше создай UserControl наследник ProgressBar (напомню, что это контрол лишенный внешнего вида) и внутри уже пропиши нужные интерфейсы для настройки изменения цвета в зависимости от прогресса.
Идея у тебя неплохая, но нужно продумать реализацию....
1
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
25.11.2015, 16:38
XML
1
2
3
4
<ProgressBar
...
Background="{Binding RelativeSource={RelativeSource Self}, Path=Value, Converter={StaticResource ValueToColorConverter}}"
/>
и реализовать конвертер, которы будет преобразовывать значение прогрессбара в цвет.


C#
1
2
3
4
5
6
7
8
9
10
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    var progress = (double)value;
    if (progress < 30)
        return new SolidColorBrush(Colors.Red);
    else if (progress >= 30 && progress < 70)
        return new SolidColorBrush(Colors.Yellow);
    else
        return new SolidColorBrush(Colors.Green);
}
1
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
25.11.2015, 16:43
Konctantin, Конвертер это не совсем правильно - им Вы решаете пользователя данного прогресс бара производить свою настройку, точнее надо лезть внутрь и копаться там, что бы что то изменить, не говоря уже об отсутствии возможности выполнить привязки и всячиские интересные связывания с данными программы - короче ни какой динамики +)
1
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
25.11.2015, 16:55
Konctantin, Конвертер это не совсем правильно
Ну я не вижу чтобы где-то требовалось произвести настройку.
И никто не говорит что это единственный вариант. так что все это дело фантазии, вариантов куча.
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
25.11.2015, 21:29  [ТС]
Всем большое спасибо

Добавлено через 2 часа 35 минут
Konctantin, я получаю ошибку в вашем примере: Не удалось разрешить ресурс ValueToColorConverter

Добавлено через 15 минут
XML
1
2
3
4
5
6
<StackPanel>
                                <ProgressBar Name="pbStatus" Value="{Binding res_v}" 
                        Background="{Binding RelativeSource={RelativeSource Self}, 
                                    Converter={StaticResource ValueToColorConverter}}" Height="20"/>
                                <TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </StackPanel>
Добавлено через 15 минут
Сделал так
XML
1
2
3
4
5
6
7
<Window.Resources>
        <local:ValueToColorConverter x:Key="converter" />
    </Window.Resources>
 
<ProgressBar Name="pbStatus" Value="{Binding N_vn}" 
                        Background="{Binding RelativeSource={RelativeSource Self}, 
                                    Converter={StaticResource converter}}" Height="20"/>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public class ValueToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var progress = (double)value;
            if (progress < 30)
                return new SolidColorBrush(Colors.Red);
            else if (progress >= 30 && progress < 70)
                return new SolidColorBrush(Colors.Yellow);
            else
                return new SolidColorBrush(Colors.Green);
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
ошибка Исключение типа "System.InvalidCastException" возникло в WpfApplication1.exe, но не было обработано в коде пользователя
Дополнительные сведения: Заданное приведение является недопустимым.
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
26.11.2015, 09:04
допустил ошибку я, не Background а Foreground, это раз.

И еще, поставьте точку останова в конверторе на строке
C#
1
var progress = (double)value;
и посмотрите какой там тип, возможно у вас там или int или float
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
26.11.2015, 11:30  [ТС]
Добрый день, не помогло, ошибка прежняя.
P.s. Даже разные типы перепробовал (int, float,double)
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
26.11.2015, 11:54
ну как же, в отладчике посмотрите что там приходит, возможно null параметром передается, если так - его надо обработать.
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
26.11.2015, 13:07  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class ValueToColorConverter : MarkupExtension, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null)
            {
                var progress = (int)value;
                if (progress < 30)
                    return new SolidColorBrush(Colors.Red);
                else if (progress >= 30 && progress < 70)
                    return new SolidColorBrush(Colors.Yellow);
                else
                    return new SolidColorBrush(Colors.Green);
            }
            return value;
            }
 
        
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return new ValueToColorConverter();
        }
    }
XML
1
2
3
4
5
  <StackPanel>
                                            <ProgressBar  Name="pbStatus" Value="{Binding res_v, Converter={local:resursed}}" Height="17" 
                                                          Foreground="{Binding RelativeSource={RelativeSource Self}, Converter={local:ValueToColorConverter}}" />
                                            <TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                                        </StackPanel>
Может я что-то не так делаю ? что скорее всего
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
26.11.2015, 14:18
C#
1
2
3
4
5
6
7
8
9
10
11
if (value != null)
            {
                var progress = (int)value;
                if (progress < 30)
                    return new SolidColorBrush(Colors.Red);
                else if (progress >= 30 && progress < 70)
                    return new SolidColorBrush(Colors.Yellow);
                else
                    return new SolidColorBrush(Colors.Green);
            }
            return Binding.DoNothing;
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
26.11.2015, 15:43  [ТС]
Ошибка прежняя вылетает тут :
var progress = (int)value;
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
26.11.2015, 17:54
ну так посмотрите отладчиком что там за тип данных.
1
Заблокирован
27.11.2015, 02:56
Dostik, у вас есть возможность выложить проект архивом?
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
27.11.2015, 09:01  [ТС]
Всем доброго времени суток, Konctantin, с вашим примером я так увы и не разобрался, нашел приблизительно альтернативный вариант, но он меня не совсем устраивает в плане перехода с красного цвета в желтый, приведу пример может кому понадобиться в будущем:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ProgressBar  Name="pbStatus" Value="{Binding res_v, Converter={local:resursed}}" Height="17" >
                                                <ProgressBar.Foreground>
                                                    <LinearGradientBrush StartPoint="0,0" EndPoint="200,0" MappingMode="Absolute">
                                                        <GradientStop Color="Red" Offset="0" />
                                                        <GradientStop Color="Red" Offset="0.1" />
                                                        <GradientStop Color="Yellow" Offset="0.1" />
                                                        <GradientStop Color="Yellow" Offset="0.5" />
                                                        <GradientStop Color="Green" Offset="0.5" />
                                                        <GradientStop Color="Green" Offset="0.99" />
                                                        <GradientStop Color="Blue" Offset="0.99" />
                                                        <GradientStop Color="Blue" Offset="1" />
                                                    </LinearGradientBrush>
                                                </ProgressBar.Foreground>
                                            </ProgressBar>
Вот такой интересный пример.
Ev_Hyper, Да конечно я могу выложить свой проект.

Не по теме:

Konctantin, У меня возникла проблема с записью в файл, а именно перестало записывать, отладчик проходит все решения вроде как записывает дата изменения самого файла меняется закрываю и открываю проект а сохранения не произошло исходные данные на прежнем месте. Может вы тоже заглянете в проект, не могу понять в чем ошибка. Спасибо всем


testn.rar в проекте подключен сторонний пакет Extended.Wpf.Toolkit.2.5., я вроде бы вложил dll, но если что можно удалить:
XML
1
 <xctk:DecimalUpDown HorizontalAlignment="Left" Margin="179,7,0,0" Grid.Row="1" VerticalAlignment="Top" Height="29"  Value="1" Increment="1" Maximum="3" Minimum="1"/>
В коде важную роль данный объект пока не играет (вроде ).
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
27.11.2015, 09:32
Лучший ответ Сообщение было отмечено Dostik как решение

Решение

По поводу прогрессбара, будьте внимательны, отладчик более чем доходчиво показал что вы не указали к какому свойству биндится.

1) Вы не указали Path=Value
2) Далее, тип значения у Value => double (var progress = (double)value

XML
1
2
<ProgressBar  Name="pbStatus" Value="{Binding res_v}"
  Foreground="{Binding RelativeSource={RelativeSource Self}, Path=Value, Converter={local:ValueToColorConverter}}" Height="17" />
Далее, гриды вы как-то забиндили криво, сделайте хотябы так:
XML
1
 ItemsSource="{Binding List1}" DataContext ="{x:Reference mainWindow}"
У меня все сохранилось после этих правок.


ЗЫ. Вы там такого намудрили, что просто ужас.
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
27.11.2015, 09:46  [ТС]
Konctantin, Большое спасибо,
1.) да действительно не внимательно, забыл про Path = value
2.) по поводу типа, это я уже все типы перепробовал а потому, какой последний тип остался тот я и скопировал сюда.
3.) я только учусь отсюда и кривой код, и то что я там намудрил и т.д., в этом проекте я делаю большой уклон на понимании как это все работает., и т.д., вижу что-то новое, пишу и пробую как работает и т.д. Поэтому прошу меня извинить за тот ужас что вам пришлось увидеть
4.) Не могли бы вы мне объяснить про этот кусочек кода "{x:Reference mainWindow}" , что он делает и т.д
Большое вам спасибо
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
27.11.2015, 09:49
Лучший ответ Сообщение было отмечено Dostik как решение

Решение

{x:Reference mainWindow}" - привязка к именованному объекту
Аналог {Binding ElementName=mainWindow}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2015, 09:49
Помогаю со студенческими работами здесь

WPF: автосортировка DataGrid
Есть обычный DataGrid: &lt;UserControl.Resources&gt; &lt;CollectionViewSource Source=&quot;{Binding Items}&quot; x:Key=&quot;GridItems&quot;&gt; ...

Проблемы с DataGrid WPF
Здравствуйте, столкнулся с такой проблемой: Если в заголовке столбца имеется точка, то не выводится значение ячеек этого столбца, они...

SQLite И DataGrid в WPF
помогите решить проблему. никак не могу понять как правильно заполнить датагрид результатами из БД, в инете везде примеры под ВинФормс... а...

DataGrid WPF и местоположение
Доброго времени суток! Будьте добры, подскажите аналог функции FirstDisplayedScrollingRowIndex и FirstDisplayedCell.Value, в DataGrid...

Devexpress WPF DataGrid
Доброго времени суток! Возник следующий вопрос. Представим себе что происходит заполнение полей в DataGrid из базы данных. Допустим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru