Можно ли изменить свойства вложенного элемента в шаблоне данных, используя триггеры из элемента управления, в котором они содержатся? - PullRequest
1 голос
/ 21 июля 2009

Я хочу изменить цвет фона прямоугольника в триггере IsMouseOver, возможно ли это?

<Window>
    <Window.Resources>
        <DataTemplate x:Key="StackListViewItemTemplate">
                <Grid>
                    <Rectangle RadiusX="5" RadiusY="5" >
                        <Rectangle.Fill>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF000000" Offset="0"/>
                                <GradientStop Color="{Binding Path=Events.Colour}" Offset="1"/>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <TextBlock FontSize="18pt" Grid.RowSpan="2" Text="{Binding Path=Events.Name}" HorizontalAlignment="Center" VerticalAlignment="Center"  />
                </Grid>
            </Grid>
        </DataTemplate>
    </Window.Resources>

    <Grid >
        <ListView ItemTemplate="{DynamicResource StackListViewItemTemplate}">
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <!-- Here I want to set the background colour of the Rectangle in the DataTemplate -->
                        </Trigger>
                        <Trigger Property="IsSelected" Value="true">
                            <!-- Same here -->
                        </Trigger>
                    </Style.Triggers>

                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </Grid>

</Window>

Edit:

<Setter Property="Background" Value="Yellow"/>

Есть ли способ привязать значение свойства сеттера к дочерним элементам управления?

Ответы [ 2 ]

1 голос
/ 29 июля 2009

Я получил его, используя datatrigger в шаблоне

<DataTemplate x:Key="listItemTemplate" DataType="ListViewItem">
    <Grid>
        <Rectangle Name="myRectangle" RadiusX="5" RadiusY="5" >
            <Rectangle.Fill>
                <SolidColorBrush Color="Red" />
            </Rectangle.Fill>
        </Rectangle>
    </Grid>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" Value="True">
            <Setter TargetName="myRectangle" Property="Fill" >
                <Setter.Value>
                    <SolidColorBrush Color="Green" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
0 голосов
/ 21 июля 2009

Да, вы должны быть в состоянии сделать что-то вроде этого:

Учебник по XAML - Изменение цвета текста при наведении мыши на

... но с прямоугольником, конечно.

...