有人能指出为什么这不适用于 Mathematica 8:
DynamicModule[{x = Pink},
Row[
{Style["Hello", x],
Mouseover[
x = Green; "World",
x = Blue; "World"]}]]
我期望看到" Hello"的颜色。当我鼠标移动时改变#34; World"。我得到的是粉红色"你好"永远不会改变颜色。
答案 0 :(得分:10)
我想我已经等了很久才公平。这是我的建议:
DynamicModule[{x = Pink},
Row[{
Dynamic@Style["Hello", If[MouseAnnotation[] === 1, x = Green; Blue, x]],
Annotation["World", 1, "Mouse"]
}]
]
答案 1 :(得分:9)
如果你查看结果的FullForm,你会发现它只包含每个复合指令集的最后一部分。显然,Mouseover会评估其参数并仅存储结果。
答案 2 :(得分:9)
尝试将EventHandler
与"MouseEntered"
和"MouseExited"
:
DynamicModule[{c = Pink}, Row[{
Style["Hello", FontColor -> Dynamic[c]],
EventHandler[
"World", {
"MouseEntered" :> (c = Blue),
"MouseExited" :> (c = Green)
}]}]]
答案 3 :(得分:7)
快速检查显示Mouseover
在您首次启动时评估其中的所有表达式:
Mouseover[Print["One"]; 1, Print["Two"]; 2]
实际使Mouseover
修改x值的惯用方法是使用MouseAnnotation
。 Wizard先生的回答描述了如何实现这一目标。
答案 4 :(得分:7)
作为替代方案,您可以执行类似
的操作DynamicModule[{col = Pink},
Row[{Style["Hello ", FontColor -> Dynamic[col]],
Dynamic@If[CurrentValue["MouseOver"],
col = Green; "World",
col = col /. Green -> Blue; "World"]}]
]