powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Style DataTriggers
14 сообщений из 14, страница 1 из 1
Style DataTriggers
    #38871275
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Бьюсь над проблемой и никак не могу решить её - помогите, пожалуйста!

У меня есть следующий стиль определённый в файле Skins/DataGrid.xaml

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 <Style TargetType="DataGridRow" x:Key="Dgrs">
        <Setter Property="Background" Value="LightYellow" />
        <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
        <Setter Property="FontSize" Value="35"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <!--<Setter Property="Height" Value="{TemplateBinding Height}" />-->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridRow}">
                    <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
                        <Border.Background>
                            <!--<Brush>DarkGray</Brush>-->
                            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Offset="0" Color="#FFA4A4A4" />
                                <GradientStop Offset="1" Color="#AA303030" />
                            </LinearGradientBrush>
                        </Border.Background>
 </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>



На форме у меня есть:

Код: 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.
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.
<DataGrid Grid.Row="1" ItemsSource="{Binding OrderDetails}" SelectedItem="{Binding CurrentDetail}" 
                      RowDetailsVisibilityMode="VisibleWhenSelected"
                      IsReadOnly="True" 
                      AutoGenerateColumns="False" 
                      Background="LightGray"
                      AlternationCount="2" 
                      CanUserSortColumns="True" 
                      CanUserResizeColumns="False"                       
                      CanUserReorderColumns="False" 
                      HeadersVisibility="None" 
                      IsManipulationEnabled="True" Grid.RowSpan="2" RowHeight="71">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Name}" Header="Продукт" Width="3*" Visibility="Visible"/>
                    <!--<DataGridTextColumn Binding="{Binding Id_Nomenk}" Header="Заявка" Width="*" Visibility="Hidden"/>
                    <DataGridTextColumn Binding="{Binding WeightOrder}" Header="Требуется" Width="145"/>
                    <DataGridTextColumn Binding="{Binding WeightSend}" Header="Ожидается" Width="145"/>
                    <DataGridTextColumn Binding="{Binding WeightReceived}" Header="Поступило" Width="145"/>
                    <DataGridTextColumn Binding="{Binding WeightPicking}" Header="Отчекован." Width="145" Visibility="Visible"/>-->
                </DataGrid.Columns>
                <DataGrid.RowDetailsTemplate>
                    <DataTemplate>
                        <ContentControl Style="{StaticResource CcBorderStyle}" >
                            <Grid Height="70" Width="Auto"
                                  HorizontalAlignment="Stretch"
                                  Style="{StaticResource GridGrayStyle}">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                <StackPanel Grid.Column="0">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightOrder}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="1">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightSend}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="2">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightReceived}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="3">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightPicking}"></TextBlock>
                                </StackPanel>
                            </Grid>
                        </ContentControl>
                    </DataTemplate>
                </DataGrid.RowDetailsTemplate>

                <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow" x:Name="sss" BasedOn="{StaticResource Dgrs}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="1">
                                <Setter Property="BorderBrush" Value="#0080FF"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="2">
                                <Setter Property="BorderBrush" Value="#808080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="3">
                                <Setter Property="BorderBrush" Value="#000080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="4">
                                <Setter Property="BorderBrush" Value="#800000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="5">
                                <Setter Property="BorderBrush" Value="#008000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="6">
                                <Setter Property="BorderBrush" Value="#008000"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle>

                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseUp">
                        <command:EventToCommand Command="{Binding ExpandDetailsCommand}"
                                            PassEventArgsToCommand="True" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>

            </DataGrid>



Вопрос:
Как заставить
<DataTrigger Binding="{Binding Id_Status, ElementName=DGR_Border}" Value="6">
<Setter Property="BorderBrush" Value="#008000"></Setter>
</DataTrigger>
работать, а именно изменять цвет Background элемента DGR_Border в зависимости от значения Id_Status.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871299
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за Id_Status, т. е. где он объявлен? Вряд ли DGR_Border найдётся в другом template'е, а если и найдётся, у Border нет такого свойства, так что это binding в никуда.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871317
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81,

Id_Status - поле объявленное во ViewModel.
В свою очередь view привязан к данной viewmodel след. образом:

<UserControl x:Class="PackingCratesController.Views.V_OrderDetails"
...
DataContext="{Binding OrderDetails, Source={StaticResource Locator}}"
d:DesignWidth="1024" d:DesignHeight="768">
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871321
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Если я оставлю описание грида на форме такую:

Код: 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.
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.
     <DataGrid Grid.Row="1" ItemsSource="{Binding OrderDetails}" SelectedItem="{Binding CurrentDetail}" 
                      RowDetailsVisibilityMode="VisibleWhenSelected"
                      IsReadOnly="True" 
                      AutoGenerateColumns="False" 
                      Background="LightGray"
                      AlternationCount="2" 
                      CanUserSortColumns="True" 
                      CanUserResizeColumns="False"                       
                      CanUserReorderColumns="False" 
                      HeadersVisibility="None" 
                      IsManipulationEnabled="True" Grid.RowSpan="2" RowHeight="71">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Name}" Header="Продукт" Width="3*" Visibility="Visible"/>
                    <!--<DataGridTextColumn Binding="{Binding Id_Nomenk}" Header="Заявка" Width="*" Visibility="Hidden"/>
                    <DataGridTextColumn Binding="{Binding WeightOrder}" Header="Требуется" Width="145"/>
                    <DataGridTextColumn Binding="{Binding WeightSend}" Header="Ожидается" Width="145"/>
                    <DataGridTextColumn Binding="{Binding WeightReceived}" Header="Поступило" Width="145"/>
                    <DataGridTextColumn Binding="{Binding WeightPicking}" Header="Отчекован." Width="145" Visibility="Visible"/>-->
                </DataGrid.Columns>
                <DataGrid.RowDetailsTemplate>
                    <DataTemplate>
                        <ContentControl Style="{StaticResource CcBorderStyle}" >
                            <Grid Height="70" Width="Auto"
                                  HorizontalAlignment="Stretch"
                                  Style="{StaticResource GridGrayStyle}">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                <StackPanel Grid.Column="0">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightOrder}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="1">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightSend}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="2">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightReceived}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="3">
                                    <TextBlock Text="Требуется"></TextBlock>
                                    <TextBlock Text="{Binding WeightPicking}"></TextBlock>
                                </StackPanel>
                                <StackPanel Grid.Column="4">
                                    <TextBlock Text="Статус"></TextBlock>
                                    <TextBlock Text="{Binding Id_Status}"></TextBlock>
                                </StackPanel>
                            </Grid>
                        </ContentControl>
                    </DataTemplate>
                </DataGrid.RowDetailsTemplate>

                <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow" >
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Id_Status}" Value="1">
                                <Setter Property="Foreground" Value="#0080FF"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="2">
                                <Setter Property="Foreground" Value="#808080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="3">
                                <Setter Property="Foreground" Value="#000080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="4">
                                <Setter Property="Background" Value="#800000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="5">
                                <Setter Property="Background" Value="#008000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="6">
                                <Setter Property="Background" Value="#008000"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle>

                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseUp">
                        <command:EventToCommand Command="{Binding ExpandDetailsCommand}"
                                            PassEventArgsToCommand="True" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>

            </DataGrid>



То у меня строки раскрашиваются как следует, но слетают все остальные параметры основного стиля. Т.е. мне надо этот блок настроить на базовый стиль и в нём менять определённое свойство.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871322
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наследуемый стиль укажите и всего делов.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871323
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Как только я добавляю BasedOn
Код: 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.
   <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Id_Status}" Value="1">
                                <Setter Property="Foreground" Value="#0080FF"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="2">
                                <Setter Property="Foreground" Value="#808080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="3">
                                <Setter Property="Foreground" Value="#000080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="4">
                                <Setter Property="Background" Value="#800000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="5">
                                <Setter Property="Background" Value="#008000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="6">
                                <Setter Property="Background" Value="#008000"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle>



То у меня применяется стандартный стиль, но применяются цвета. Надо их как-то настроить на опр. элемент и его свойство в базовом стиле. В данной случае DGR_Border.Background.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871324
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,
Ошибся: НЕ ПРИМЕНЯЮТСЯ цвета
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871327
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если
Код: xml
1.
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">


то будет стандартный стиль в качестве наследуемого. Или
Код: xml
1.
<Style TargetType="DataGridRow" BasedOn="{StaticResource Dgrs}">


раз он объявлен.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871335
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто убрал название базового стиля. Актуальное состояние на данный момент:

Базовый стиль:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<Style TargetType="DataGridRow">
        <Setter Property="Background" Value="LightYellow" />
        <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
        <Setter Property="FontSize" Value="35"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <!--<Setter Property="Height" Value="{TemplateBinding Height}" />-->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridRow}">
                    <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
                        <Border.Background>
                            <!--<Brush>DarkGray</Brush>-->
                            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Offset="0" Color="#FFA4A4A4" />
                                <GradientStop Offset="1" Color="#AA303030" />
                            </LinearGradientBrush>
                        </Border.Background>
                        <SelectiveScrollingGrid>
...                            



Стиль объявленный на форме:
Код: 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.
      <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Id_Status}" Value="1">
                                <Setter Property="Foreground" Value="#0080FF"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="2">
                                <Setter Property="Foreground" Value="#808080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="3">
                                <Setter Property="Foreground" Value="#000080"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="4">
                                <Setter Property="Foreground" Value="#800000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="5">
                                <Setter Property="Foreground" Value="#008000"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="6">
                                <Setter Property="Foreground" Value="#008000"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle>



Если я применяю к Foreground, то у меня меняется цвет текста в строке. Как менять цвет DGR_Border?
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871344
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логично, ибо setter строит на свойство Foreground, т. е. цвет текста. Строка
Код: xml
1.
<Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">                   


говорит о том, что setter нужно ставить на свойство BorderBrush.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871409
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81,

Ни так, ни так цвет не меняется
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
          <DataTrigger Binding="{Binding Id_Status}" Value="5">
                                <Setter Property="BorderBrush">
                                    <Setter.Value>
                                        <Brush>Red</Brush>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="6">
                                <Setter Property="BorderBrush" Value="#008000"></Setter>
                            </DataTrigger>
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871425
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.Ilya81,

Ни так, ни так цвет не меняется
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
          <DataTrigger Binding="{Binding Id_Status}" Value="5">
                                <Setter Property="BorderBrush">
                                    <Setter.Value>
                                        <Brush>Red</Brush>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Id_Status}" Value="6">
                                <Setter Property="BorderBrush" Value="#008000"></Setter>
                            </DataTrigger>


Верхний Setter зачем? Да и вероятно толщина рамки не задана. А фон в приведённом ControlTemplate задан фиксировано, он по DataTrigger меняться не будет.
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871486
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор пытается изменить свойства элемента шаблона в не шаблона. Это нормально? или меня глючит?
...
Рейтинг: 0 / 0
Style DataTriggers
    #38871503
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesавтор пытается изменить свойства элемента шаблона в не шаблона. Это нормально? или меня глючит?
Я о том ж самом, если под цветом DGR_Border он подразумевает цвет фона (не рамки), и пытаюсь объяснить, как пользоваться TemplateBinding.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Style DataTriggers
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]