【问题标题】:ElementName binding doesn't work for IsMouseOver in ControlTemplate?ElementName 绑定对 ControlTemplate 中的 IsMouseOver 不起作用?
【发布时间】:2023-04-08 21:46:01
【问题描述】:

我有一个控制模板,我只想在鼠标悬停在模板的某个部分上时触发一些操作。这是我的模板的核心(为演示而简化):

<ControlTemplate TargetType="{x:Type graphicElements:MyTabItem}">
    <Grid x:Name="templateRoot">
         <Grid x:Name="templateChild" />
    </Grid>
    <ControlTemplate.Triggers>
         <DataTrigger Binding="{Binding IsMouseOver, ElementName=templateChild}" Value="True">
              <Setter Property="Background" TargetName="templateRoot" Value="Red" />
         </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

当我将 ElementName 作为 templateRoot 时,它会工作并变成红色。当我把它作为 templateChild 它不起作用...为什么不呢?

【问题讨论】:

  • 你需要放上非简化版的代码才能确定你的实际问题。空网格不会引发 IsMouseOver 事件。

标签: wpf xaml


【解决方案1】:

在您的代码的简化版本中,与 templateRoot 网格的绑定也不起作用。问题是,WPF 需要对元素执行Hit Tests 以引发某些事件或更新 IsMouseOver 属性。由于您没有为网格设置背景画笔,它们将永远不会收到鼠标输入,因此您的触发器将永远不会执行。试试这个:

<Grid x:Name="templateRoot">
    <Grid x:Name="templateChild" Background="Transparent"/>
</Grid>

【讨论】:

  • 。谢谢,今天过得怎么样...确实我没有设置背景,谢谢。
猜你喜欢
  • 2010-09-18
  • 2013-02-23
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多