【问题标题】:Button with custom ControlTemplate sometimes misses clicks带有自定义 ControlTemplate 的按钮有时会错过点击
【发布时间】:2012-01-18 11:17:52
【问题描述】:

带有自定义ControlTemplateButton 不会响应每次点击。我不知道为什么,因为点击是否有效是完全随机的。

控制模板:

<ControlTemplate x:Key="KreisPlus">
    <Path Data="M74,37.5 C74,57.658393 57.658393,74 37.5,74 C17.341607,74 1,57.658393 1,37.5 C1,17.341607
            17.341607,1 37.5,1 C57.658393,1 74,17.341607 74,37.5 z M32.113861,13.5 L43.386139,13.5 43.386139,
            32.613861 62.5,32.613861 62.5,43.886139 43.386139,43.886139 43.386139,63 32.113861,63 32.113861,
            43.886139 13,43.886139 13,32.613861 32.113861,32.613861 z"
            Height="20" Stretch="Fill" Stroke="#FFD7D7D7" Width="20">
        <Path.Fill>
            <RadialGradientBrush>
                <GradientStop Color="#FF1F71D5" />
                <GradientStop Color="White" Offset="0.94" />
                <GradientStop Color="#FF6499E0" Offset="0.78" />
            </RadialGradientBrush>
        </Path.Fill>
    </Path>
</ControlTemplate>

<Button Click="Button_Click" Template="{StaticResource ResourceKey=KreisPlus}" />

【问题讨论】:

  • 即使按钮已填充,当您单击路径时也会获得点击,这是您的问题吗?
  • 我刚刚测试过了。只有当我点击路径时才会触发点击。只有蓝色的背景会响应点击。
  • 您是否尝试过制作路径 IsHitTestVisible="False"?

标签: wpf button controltemplate


【解决方案1】:

试试这个代码示例,看看是否符合您的预期?

        <ControlTemplate x:Key="KreisPlus" TargetType="{x:Type Button}">

        <Grid HorizontalAlignment="Stretch"
              VerticalAlignment="Stretch"
              Background="Transparent" >
        <Path Data="M74,37.5 C74,57.658393 57.658393,74 37.5,74 C17.341607,74 1,57.658393 1,37.5 C1,17.341607 17.341607,1 37.5,1 C57.658393,1 74,17.341607 74,37.5 z M32.113861,13.5 L43.386139,13.5 43.386139,32.613861 62.5,32.613861 62.5,43.886139 43.386139,43.886139 43.386139,63 32.113861,63 32.113861,43.886139 13,43.886139 13,32.613861 32.113861,32.613861 z"
              Height="20"
              Stretch="Fill"
              Stroke="#FFD7D7D7"

              Width="20">
            <Path.Fill>
                <RadialGradientBrush>
                    <GradientStop Color="#FF1F71D5" />
                    <GradientStop Color="White"
                                  Offset="0.94" />
                    <GradientStop Color="#FF6499E0"
                                  Offset="0.78" />
                </RadialGradientBrush>
            </Path.Fill>
        </Path>
        </Grid>
    </ControlTemplate>

现在路径在网格内部,因此它可以响应点击。这将占用整个区域,并且只占用中心的路径。因此,如果您在任何地方单击按钮,即使在路径之外也会执行单击。如果你不想要这个并且你希望路径应该响应点击,只需将水平和垂直对齐更改为中心

HorizontalAlignment="Center"
VerticalAlignment="Center"

【讨论】:

  • 谢谢。现在它起作用了。但老实说,我不知道为什么。这是否与冒泡的事件有关,他们以前没有做过什么?
  • 别忘了设置背景
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2014-02-09
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多