WPF下,控制項未響應滑鼠屬性觸發器

2021-10-07 08:31:31 字數 1778 閱讀 4658

使用wpf寫了個自定義控制項,其中有個button按鈕,重寫了樣式模板

<

button width=

"50" height=

"25" foreground=

"black"

>

<

border x:name=

"clearborder" snapstodevicepixels=

"true"

>

<

path x:name=

"xx" stroke=

"">

<

style targettype=

"path"

>

<

setter property=

"data" value=

"m1.25,6.75 l6.75,1.25 m1.25,1.25 l6.75,6.75"

>

<

/setter>

<

setter property=

"horizontalalignment" value=

"center"

/>

<

setter property=

"verticalalignment" value=

"center"

/>

<

setter property=

"shape.strokeendlinecap" value=

"round"

/>

<

/style>

<

/path.style>

<

/path>

<

/border>

<

trigger property=

"ismouseover" value=

"true"

>

<

setter targetname=

"clearborder" property=

"background" value=

"blue"

>

<

/setter>

<

setter targetname=

"xx" property=

"stroke" value=

"yellow"

>

<

/setter>

<

/trigger>

<

/controltemplate.triggers>

<

/controltemplate>

<

/button.template>

<

/button>

使用時發生了乙個奇怪的現象,滑鼠只有很靠近path的時候,背景色才會變化。

監視了屬性的變化,確實只有滑鼠移動到path附近的時候,ismouseover屬性才變為true。

為什麼滑鼠已經移動到button內但是ismouseover屬性卻沒有變化呢?

原因在於沒有為border設定預設的背景色。當border的背景色沒有設定時,其屬性值為null,當控制項呼叫inputhittest方法檢測時,會直接跳過,所以影響到滑鼠事件的響應。

改進方法也很簡單,設定border的背景色為transparent,透明背景的控制項依然會被hit test檢測到,所以能正常響應滑鼠事件,顯示上也不會受影響。

相似問題

hit test說明

WPF 控制項屬性

1 高度和寬度 不同尺寸的預設值 minheight maxheight height minwidth maxwidth width 0infinity nan auto 自動 其他尺寸 desiredsize rendersize actualheight actualwidth 2 邊框距離 ...

MFC控制項響應滑鼠中鍵OnMouseWheel

控制項必須獲取焦點才能響應 onmousewheel 因此首先要在控制項的 onlbuttondown 裡呼叫setfocus 然後過載控制項的 onmousewheel 函式 bool cyucvimagecontrol onmousewheel uint nflags,short zdelta,...

WPF控制項常用屬性(持續更新)

scrollviewer 滾動條 1.vertical horizontal scrollbarvisibility 是否出現滾動條 2.cancontentscroll 逐元素展示 text 字型 1.fortfamily 例如宋體,楷體各種字型的集合 2.fontsize 大小 3.fontst...