14

Mathematica 8でこれが機能しない理由を誰か指摘できますか:

DynamicModule[{x = Pink},
 Row[
  {Style["Hello", x],
   Mouseover[
    x = Green; "World",
    x = Blue; "World"]}]]

私が期待しているのは、「World」にマウスを合わせると「Hello」の色が変わることです。私が得ているのは、色が変わらないピンクの「Hello」です。

4

5 に答える 5

10

私は公正であるために十分長く待ったと思います。これが私の提案です:

DynamicModule[{x = Pink},
 Row[{
   Dynamic@Style["Hello", If[MouseAnnotation[] === 1, x = Green; Blue, x]],
   Annotation["World", 1, "Mouse"]
 }]
]
于 2011-11-30T01:51:13.553 に答える
9

結果の FullForm を見ると、各複合命令セットの最後の部分のみが含まれていることがわかります。どうやら Mouseover はその引数を評価し、結果のみを保存します。

ここに画像の説明を入力

于 2011-11-29T22:51:54.670 に答える
9

とを使用EventHandlerして"MouseEntered"みてください"MouseExited":

DynamicModule[{c = Pink}, Row[{
 Style["Hello", FontColor -> Dynamic[c]], 
 EventHandler[
  "World", {
   "MouseEntered" :> (c = Blue), 
   "MouseExited" :> (c = Green)
}]}]]
于 2011-11-30T01:51:22.927 に答える
7

Mouseover最初に起動したときに内部のすべての式が評価されることを簡単に確認すると、次のようになります。

Mouseover[Print["One"]; 1, Print["Two"]; 2]

Mouseoverx の値を実際に変更する慣用的な方法は、を使用することMouseAnnotationです。Mr. Wizard's answer は、これを達成する方法を説明しています。

于 2011-11-29T22:52:41.860 に答える
7

別の方法として、次のようなことができます

DynamicModule[{col = Pink}, 
 Row[{Style["Hello ", FontColor -> Dynamic[col]], 
   Dynamic@If[CurrentValue["MouseOver"],
     col = Green; "World", 
     col = col /. Green -> Blue; "World"]}]
] 
于 2011-11-29T22:54:14.827 に答える