代码之家  ›  专栏  ›  技术社区  ›  monkey_p

是否可以使用包含控件中的触发器更改数据模板中子项的属性?

  •  1
  • monkey_p  · 技术社区  · 15 年前

    我想更改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>
    

    编辑:

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

    是否有方法将setter的属性值绑定到子控件?

    2 回复  |  直到 13 年前
        1
  •  1
  •   monkey_p    15 年前

    我在模板中使用了一个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>
    
        2
  •  0
  •   Justin Niessner    15 年前

    是的,您应该能够这样做:

    XAML Tutorial - Changing the Text Color on Mouse Over

    …当然是长方形的。