WPF:当父母被淘汰时,我可以设置ChildElement的IsMouseOver属性吗?

时间:2010-11-11 14:10:39

标签: wpf templates listbox styles

假设我有一个嵌套在Template的{​​{1}}中的按钮,我可以将按钮的ListBoxItem属性设置为true,这样它看起来就像是moused? / p>

仅举例说明,窗口顶部的通知就是我所指的。基本为IsMouseOverListBoxItemTextBlock

alt text

1 个答案:

答案 0 :(得分:2)

不幸的是,没有。 “IsMouseOver”是只读的。

但是,我假设你有一个Button的自定义控件模板,对吗?如果是这种情况,一种解决方法是弄乱按钮的Tag属性。向ControlTemplate添加一个触发器,该触发器在设置特定Tag值时被触发。然后,在ListBoxItems的DataTemplate中,只需在项目上的IsMouseOver为true时将按钮的Tag设置为该特定值。以下是一个例子:

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <DockPanel x:Name="dp" Background="Transparent">
                <Button x:Name="btn" DockPanel.Dock="Right" Content="x" Background="Gainsboro">
                    <Button.Template>
                        <ControlTemplate TargetType="Button">
                            <Border x:Name="bd" Padding="2" BorderBrush="Black" BorderThickness="1"
                                    Background="WhiteSmoke">
                                <ContentPresenter/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter TargetName="bd" Property="Background" Value="LightBlue"/>
                                </Trigger>
                                <Trigger Property="Tag" Value="SimulatedMouseOver">
                                    <Setter TargetName="bd" Property="Background" Value="LightBlue"/>
                                </Trigger>
                                <Trigger Property="IsPressed" Value="True">
                                    <Setter TargetName="bd" Property="Background" Value="Gray"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
                <TextBlock Text="{Binding}"/>
            </DockPanel>
            <DataTemplate.Triggers>
                <Trigger SourceName="dp" Property="IsMouseOver" Value="True">
                    <Setter TargetName="btn" Property="Tag" Value="SimulatedMouseOver"/>
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <s:String>Item1</s:String>
    <s:String>Item2</s:String>
    <s:String>Item3</s:String>
</ListBox>