Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:当鼠标移到父元素上时,我可以设置ChildElement的IsMouseOver属性吗?_Wpf_Templates_Listbox_Styles - Fatal编程技术网

WPF:当鼠标移到父元素上时,我可以设置ChildElement的IsMouseOver属性吗?

WPF:当鼠标移到父元素上时,我可以设置ChildElement的IsMouseOver属性吗?,wpf,templates,listbox,styles,Wpf,Templates,Listbox,Styles,假设我在ListBoxItem的模板中嵌套了一个按钮,我是否可以将按钮的IsMouseOver属性设置为true,使其看起来像鼠标移过的按钮 只是为了举例说明,窗口顶部的通知就是我所指的。基本上,它的ListBoxItem带有TextBlock和按钮 不幸的是,“IsMouseOver”不是只读的 不过,我假设您有一个按钮的自定义控件模板,对吗?如果是这样的话,一个解决办法就是弄乱按钮的Tag属性。向ControlTemplate添加一个触发器,该触发器在设置特定标记值时触发。然后,在ListB

假设我在
ListBoxItem
模板中嵌套了一个按钮,我是否可以将按钮的
IsMouseOver
属性设置为true,使其看起来像鼠标移过的按钮

只是为了举例说明,窗口顶部的通知就是我所指的。基本上,它的
ListBoxItem
带有
TextBlock
按钮

不幸的是,“IsMouseOver”不是只读的

不过,我假设您有一个按钮的自定义控件模板,对吗?如果是这样的话,一个解决办法就是弄乱按钮的Tag属性。向ControlTemplate添加一个触发器,该触发器在设置特定标记值时触发。然后,在ListBoxItems的DataTemplate中,当IsMouseOver在项目上为true时,只需将按钮的标记设置为该特定值。以下是一个例子:

<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>

项目1
项目2
项目3
我收到错误“无法在样式设置器上设置TargetName属性”。我的代码看起来像是高亮显示的相关代码。此外,如果我有一组我想要的setter,我可以将它们分组成一种样式然后引用它们吗?“TargetName”只能在模板(例如ControlTemplate、DataTemplate)中定义的触发器上设置。我假设您的DockPanel是ListBox的数据模板的一部分。如果是这种情况,则需要在该模板中定义IsMouseOver触发器,并将按钮的Setter移动到该模板中。