﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='blogformat.xsl' version='1.0'?>
<!-- (c) 2007 by Charles Petzold (www.charlespetzold.com) -->
<blog>
  <item>
    <title>1859 Books: George Meredith’s “The Ordeal of Richard Feverel”</title>
    <permalink>2009/06/George-Meredith-The-Ordeal-of-Richard-Feverel.html</permalink>
    <comments>Comments (1)</comments>
    <dateline>June 20, 2009<br />Roscoe, N.Y.</dateline>
    <content><ul>  "If we can take any date as Year One of what we call the modern world, that date is 1859."<br />  &#x2014; Mervyn Jones, <i>The Amazing Victorian: A Life of George Meredith</i> (1999), p. 84  </ul>  <ul>  "As far as English fiction is concerned, ... there can be no doubt that the modern novel began with the publication of <i>The Ordeal of Richard Feverel</i> in 1859."<br />  &#x2014; J. B. Priestley, <i>George Meredith</i> (1926), p. 164.   </ul>  <p>  The Victorian era in England is often portrayed as a rather prudish time, but that impression is based mostly on their literature, which often refers to sexual matters obliquely, if at all. Some of this reticence about sex in Victorian literature results from the custom of families reading books aloud to each other. In effect, novels had to be appropriate for all ages.  </p>  <ul>  Reading was a family affair. From Jane Austen's family at the beginning of the century to Dean Liddell's in the 1860s, family members read aloud to each other, in the way they watch television today. Publishers' readers kept in mind what George Meredith contemptuously called 'the republic of the fireside' when accepting or rejecting manuscripts, and Edward Mudie made his fortune by stocking his circulating library with books suitable for family consumption. &#x2014; Louis James, <i>The Victorian Novel</i> (2006), p. 73  </ul>  <p>  As the 1850s glided into the 1860s, family reading time became less common, partially as a result of literature written specifically for children (<i>Alice's Adventures in Wonderland</i> appeared in 1865) and increased leisure time for the middle-class woman, allowing private reading time for her as well. (See the chapter "Affairs of the Heart(h)" in <i>The Victorian Novel</i>)  </p>  <p>  One book clearly inappropriate for family reading was George Meredith's eccentric, astonishing, comical, erudite, poetic, difficult, brainy, complex, infuriating first novel, <i>The Ordeal of Richard Feverel: A History of Father and Son</i>, published on June 20, 1859, 150 years ago today.  </p>  <p>  The high cost of books in those days required that authors rely on big sales from the lending libraries, and particularly the one run by Mudie. At first it seemed that <i>The Ordeal of Richard Feverel</i> would be a financial success. As George Meredith explained in a letter some months later,   </p>  <ul>  Mudie, it appears, took 300 copies: (deigning to say that he had some hope of me etc.). He replied that he had advertised it as much and as long as he could, but that, in consequence of the urgent remonstrance of several respectable families, who objected to it as dangerous and wicked and damnable, he was compelled to withdraw it. Such is the case. There are grossly prurient, and morbidly timid, people, who might haply be hurt, and with these the world is well stocked. &#x2014; Letter of October 3, 1859, <i>Letters of George Meredith</i> (1970), p. 42-43  </ul>  <p>  That was a more subdued analysis than the reaction he had soon after the incident:  </p>  <ul>  I fear I have offended Mudie and the British Matron. He will not, or haply, dare not put me in his advertised catalogue. Because of the immoralities I depict! O canting Age! ... Meanwhile I am tabooed from all decent drawing-room tables. &#x2014; Letter of July 7, 1859; <i>Letters of George Meredith</i>, p. 39  </ul>  <p>  Of course, <i>The Ordeal of Richard Feverel</i> is tame by today's standards, but anyone familiar with the conventions of Victorian literature is likely to be surprised by the large role that sex plays in this novel. For me, the jaw-dropping scene involved a high-class prostitute engaging in erotic cross-dressing.   </p>  <p>  From Google Book Search, you can access  <a href="http://books.google.com/books?id=QroBAAAAQAAJ">Volume 1</a>,   <a href="http://books.google.com/books?id=uTYJAAAAQAAJ">Volume 2</a>, and  <a href="http://books.google.com/books?id=3zYJAAAAQAAJ">Volume 3</a> of the original 1859 edition of <i>The Ordeal of Richard Feverel</i>, but I strongly recommend you go with a modern edition with notes that help decipher Meredith's many obscure allusions. The Penguin edition &#x2014; edited and with an introduction by Edward Mendelson (my old friend from <i>PC Magazine</i> days) &#x2014; is ideal and readily available.  </p>  <p>  <i>The Ordeal of Richard Feveral</i> was George Meredith's first real novel, published when he was 31 years old. He had previously published a book of poetry and two fables, but with <i>Richard Feverel</i> he found a unique comic voice and a sophisticated prose style that makes his novels more difficult than Dickens or Trollope. Meredith often requires we poor readers to struggle through forests of irony, and at times he slips into the incomprehensible.  </p>   <p>  For at least half its length, <i>The Ordeal of Richard Feverel</i> is basically a comedy. Sir Austin Feverel is raising his son Richard with a System that he has developed, and which he is developing into a book, "Proposal for a New System of Education of our British Youth." This System requires that Richard remain morally pure and ignorant of sex until he is married at the age of 25 to a younger woman of Sir Austin's choosing who is as uncontaminated as his own son. In 1859, even the staidest of Victorians would have recognized that such a scheme was doomed to failure.  </p>  <p>  To keep Richard pure of thought and deed, Sir Austin has tried to prevent him from meeting girls of his own age. He is alarmed when he discovers that Richard has been reading John Lemprière's <i>Classical Dictionary</i> because the descriptions of randy Greek and Roman gods might have a corrupting influence on the adolescent mind. When Sir Austin discovers that Richard has been writing poetry, he directs his son to destroy all his poems. He even instructs the servents to avoid Public Displays of Affection in Richard's presence:   </p>  <ul>  "I hope I am too just to object to the exercise of their natural inclinations. All I ask from them is discreetness.... No gadding about in couples," continued the Baronet, "no kissing in public. Such occurrences no boy should witness. Whenever people of both sexes are thrown together, they will be silly, and where they are high-fed, uneducated, and barely occupied, it must be looked for as a matter of course. Let it be known that I only require discreetness." (Vol. I, Ch. XVI &#x2014; all chapter references are to the first edition)  </ul>  <p>  Although some scholars have tried to trace Sir Austin's fictional child-rearing practices to Herbert Spencer's recent writings on education, it seems likely that Meredith based the System more on Rousseau's <i>Émile</i>, particularly the idea that men should marry at the age of 25 and only then educated on the birds and the bees. (Rousseau's <i>Confessions</i> are alluded to elsewhere in <i>Richard Feverel</i>.)  </p>  <p>  Although Sir Austin believes his System to be founded on sound scientific principles &#x2014; and Meredith often sardonically refers to him as a Scientific Humanist &#x2014; it is obvious from the early pages of <i>Richard Feverel</i> that Sir Austin has a misogynist view of women based on his belief in Original Sin, which he often refers to as the Apple Disease or the Great Shaddock Dogma. (Shaddock is an early term for grapefruit, which was associated with the forbidden fruit.) Sir Austin has published an anonymous book of aphorisms that includes such gems as "I expect that Woman will be the last thing civilized by Man."   </p>  <p>  On a more psychological level, Sir Austin's fear of Richard's possible "ordeal" if his marriage is not arranged correctly has arisen from Sir Austin's own disastrous marriage. His wife (and Richard's mother) ran off with a family friend, the poet Denzil Somers, who writes under the name Diaper Sandoe. (This pseudonym is not nearly as ridiculous to the British audience as it is to North Americans: In Great Britain, a "diaper" is a repeating pattern woven on fabric, while the cloth that covers a baby's bottom is called a "napkin" or "nappy.") Diaper Sandoe's poetry &#x2014; which is liberally quoted in <i>Richard Feverel</i>, for Meredith was also a poet &#x2014; also obviously influenced Sir Austin's antipathy toward's Richard's poetry.  </p>  <p>  (Curiously enough, when George Meredith was writing <i>Richard Feverel</i>, his wife had recently run off with a painter, and he was raising their son as a single parent. Meredith was obviously using some of his own bitterness in fabricating Sir Austin's personality and views, yet he seemed to transcend his own concerns by comically extrapolating the type of parent he might become were he to learn the wrong lessons from his failed marriage.)   </p>  <p>  Sir Austin's System isn't a complete disaster. Richard becomes a bright healthy boy, although inheriting a streak of stubborn pride from his father, and at times exhibiting a quick temper. But to credit Richard's character entirely to the System wouldn't be quite accurate either, as demonstrated by a sequence of events that begins on Richard's 14th birthday:  </p>  <p>  Richard and a friend take revenge on a farmer who offended them by burning his rick, and when Sir Austin figures out that Richard is at fault, he assumes that Richard will come to the correct decision by himself and apologize. Richard's cousin, Adrian Harley, who has been appointed by Sir Austin to tutor the boy and who Meredith ironically terms the "Wise Youth," tries to circumvent the need for apology by bribing a witness to put the blame on someone else. But it is another of Richard's cousins, Austin Wentworth, who sits down with the boy and who makes him understand the importance of taking responsibility for one's actions.   </p>  <p>  The presence of two characters with the name "Austin" is sometimes confusing (although Meredith is careful to always refer to Richard's father as "Sir Austin") but I think Meredith is inviting the reader to contrast the two men. Cousin Austin seems to be the real Humanist of the family. For much of the novel, however, he is away in South America "looking out a place &#x2014; it's a secret &#x2014; for poor English working-men to emigrate to and found a colony in that part the world." (Vol. II, Ch. V) Had Austin been around more, many of the problems that develop might have been averted, and there wouldn't be a novel at all.  </p>  <p>  When Richard is nearing the age of 18, Sir Austin decides the time is right for him to find a suitable wife for Richard as unsoiled as he, and to arrange a betrothal for a marriage to be scheduled 7 years hence. Sir Austin journeys to London to begin his search. But another goal is to reinforce his belief that he has made the correct decision in not allowing Richard to sow any wild oats during his youth.   </p>  <ul>  Before commencing his campaign, he called on two ancient intimates, Lord Heddon, and his distant cousin Darley Absworthy, both Members of Parliament, useful men, though gouty, who had sown in their time a fine crop of Wild Oats, and advocated the advantage of doing so, seeing that they did not fancy themselves the worse for it. He found one with an imbecile son, and the other with consumptive daughters. "So much," he wrote in the Note-book, "for the Wild Oats theory!" (Vol. II, Ch. II)  </ul>  <p>  Much more amenable to Sir Austin is the household of Mrs. Grandison, who Meredith tells us is a descendant of Sir Charles Grandison, the title character of a novel by Samuel Richardson. Mrs. Grandison is in complete accordance with Sir Austin concerning the importance of maintaining the purity of their children, and she proudly exhibits six of her eight daughters for his inspection, as well as the Gymnasium she has built.  </p>  <ul>  Daughters and little dogs trooped to the Gymnasium, which was fitted up in the court below, and contained swing-poles, and stride-poles, and newly invented instruments for bringing out special virtues: an instrument for the lungs: an instrument for the liver: one for the arms and thighs: one for the wrists: the whole for the promotion of the Christian accomplishments.  (Vol. II, Ch. III)  </ul>  <p>  Sir Austin is so blinded by Mrs. Grandison's educational theories that he fails to see that her daughters are really in no better shape than the children of the Wild Oats advocates. Nonetheless, Sir Austin settles upon the youngest &#x2014; a 13-year old named Carola. (And yes, even though the marriage won't be for another 7 years, it's still a little creepy.)    </p>  <p>  But it's much too late. Richard has already accidently met a young woman closer to his own age while rowing on a river, and in a famous sequence of passages, Meredith humorously and poetically captures the phenomenon of love at first sight. It begins like this:  </p>  <ul>  Above green-flashing plunges of a weir, and shaken by the thunder  below, lilies, golden and white, were swaying at anchor among the   reeds. Meadow-sweet hung from the banks thick with weed and trailing   bramble, and there also hung a daughter of Earth. Her face was shaded   by a broad straw-hat with a flexible brim that left her lips and chin in   the sun, and sometimes nodding, sent forth a light of promising eyes.   Across her shoulders, and behind, flowed large loose curls, brown in   shadow, almost golden where the ray touched them. She was simply   dressed, befitting decency and the season. On a closer inspection you   might see that her lips were stained. This blooming young person was   regaling on dewberries. They grew between the bank and the water.   Apparently she found the fruit abundant, for her hand was making pretty   progress to her mouth. Fastidious youth, which shudders and revolts at   woman plumping her exquisite proportions on bread-and-butter, and   would (we must suppose) joyfully have her quite scraggy to have her   quite poetical, can hardly object to dewberries. Indeed the act of eating   them is dainty and induces musing. The dewberry is a sister to the   lotos, and an innocent sister. You eat: mouth, eye, and hand are   occupied, and the undrugged mind free to roam. And so it was with the   damsel who knelt there. The little skylark went up above her, all song,   to the smooth southern cloud lying along the blue: from a dewy copse   standing dark over her nodding hat, the blackbird fluted, calling to her   with thrice mellow note: the kingfisher flashed emerald out of green  osiers: a bow-winged heron travelled aloft, seeking solitude: a boat  slipped towards her, containing a dreamy youth, and still she plucked  the fruit, and ate, and mused, as if no fairy prince were invading her  territories, and as if she wished not for one, or knew not her wishes.  Surrounded by the green shaven meadows, the pastoral summer buzz,  the weir-fall's thundering white, amid the breath and beauty of wildflowers,   she was a bit of lovely human life in a fair setting: a terrible   attraction. The Magnetic Youth leaned round to note his proximity to   the weir-piles, and beheld the sweet vision. Stiller and stiller grew   Nature, as at the meeting of two electric clouds. Her posture was so   graceful that, though he was making straight for the weir, he dared not   dip a scull. Just then one enticing dewberry caught her eye. He   was floating by unheeded, and saw that her hand stretched low, and   could not gather what it sought. A stroke from his right brought him   beside her. The damsel glanced up dismayed, and her whole shape   trembled over the brink. Richard sprang from his boat into the water.   Pressing a hand beneath her foot, which she had thrust against the   crumbling wet sides of the bank to save herself, he enabled her to  recover her balance, and gain safe earth, whither, emboldened by the  incident, touching her finger's tip, he followed her. (Vol. I, ch. XVII)  </ul>  <p>  Lucy Desborough is a fine young woman, even someone Richard's father would have selected for his son if he had not been so dogmatically fixed on making his own choice from families philosophically in accordance with his own ideas. But Lucy's uncle is a farmer (the same farmer whose rick Richard burned four years ago), and Lucy herself is Catholic, so she is summed up by cousin Adrian with the quaint label "the Papist dairymaid" (Vol. III, ch. I).  </p>  <p>  Richard is definitely his father's son. He has inherited (or learned) a combination of pride and obstinacy that pits father against son as two stubborn and immovable objects, propelling the novel down the road to tragedy.   </p>  <p>  Taking advantage of a separation between Richard and Lucy imposed by Sir Austin, a predator named Lord Mountfalcon swoops down and begins a seduction of Lucy, while his concubine &#x2014; a high-class prostitute sometimes called Bella but often referred to as Mrs. Mount (and I suspect there's a pun or two in there) &#x2014; is given the job of distracting and possibly seducing Richard.   </p>  <p>  Bella is perhaps the most memorable character in <i>Richard Feverel</i>, world-weary and love-weary at the age of 21, able to string Richard along in a relationship that begins Platonically but which she can skillfully twist in whatever direction she wills.   </p>  <p>  The tragic ending of <i>The Ordeal of Richard Feverel</i> was problematic for contemporary readers, who expected a novel that began as a comedy to end as a comedy. Similar criticism continued for about a century. (Do a title search of "Richard Feverel" in   <a href="http://www.jstor.org">JSTOR</a> and you'll turn up 14 often illuminating articles published between 1946 and 1980.) Readers today don't mind so much; following the emergence of Black Humor in the 1950s and early 1960s &#x2014; <i>Catch-22</i> was published in 1961 and <i>Dr. Strangelove</i> was released in 1964 &#x2014; we're much more inclined to accept and even admire genre-bending novels like <i>Richard Feverel</i>.   </p>  <p>  In a first reading of <i>Richard Feverel</i>, the initial impression of a comedy is so strong that you keep holding on to the idea long after it has turned more solemn, and the tragic ending seems tacked on and unjustified. A second reading reveals this shift from the comic to the tragic to be integral to the novel's structure. Meredith has strewn plenty of symbols of foreboding throughout the novel, and one of the subsidiary pleasures of <i>Richard Feverel</i> is seeing how Meredith skillfully shifts the tone. (For my second reading I found helpful the "five-act" analysis of Lawrence Poston, "Dramatic Reference and Structure in The Ordeal of Richard Feverel," <i>Studies in English Literature, 1500-1900</i>, Vol. 6, No. 4, Nineteenth Century (Autumn, 1966), pp. 743-752. There is certainly a reason why Meredith titled a chapter (Vol. II, Ch. XIV) "In which the Last Act of a Comedy Takes the Place of the First.")  </p>  <p>  It's easy to detect the basic flaw in Sir Austin's System of educating his son: It doesn't allow for human nature or even common sense. It might seem like science to Sir Austin because he's sure it's based on a sound foundation, from which everything else flows in perfect rational thought. Sir Austin doesn't realize that this System is actually born of his wrath with his disastrous marriage. Sir Austin is an "egoist" &#x2014; a common brunt of Meredith's comic writing &#x2014; a man who sees himself as the center of a pre-Copernican pre-Lyellian world, unable to grasp that he is part of a larger natural universe.  </p>   <p>  What Sir Austin's System is missing is basic empiricism. In the context of 1859, <i>The Education of Richard Feverel</i> can be interpreted as the battle for Richard's soul between two world-views: natural theology, which treats science as the study of intelligent design in nature, and the emerging science of evolution through natural processes.   </p>  <p>  It's significant that the novel takes place sometime in the decade preceeding Victoria's ascension in 1837. (See John Halperin's introduction to <i>The Ordeal of Richard Feverel</i>, Oxford World's Classics, 1984.) The early 1830s encompassed the last hurrah of natural theology with the publication of the Bridgewater Treatises, and the transition to Old Earth cosmology with the publication of Charles Lyell's <i>Principles of Geology</i>.  </p>  <p>  Judging from the following aphorism, Sir Austin is evidently a believer in natural theology:   </p>  <ul>  There is for the mind but one grasp of Happiness: from that uppermost pinnacle of Wisdom, whence we see that this world is well-designed. (Vol. I, Ch. XIII)   </ul>  <p>  In a designed universe, everything is predetermined; nothing is left to chance. Sir Austin is forcing nature to conform to his "scientific" assumptions, and playing God to re-create himself in a perfected state. He's not willing to allow the serendipity of nature to play a role in life  (as it did with the meeting between Richard and Lucy). He wants everything to be neat and ordered, manipulated and designed. When Sir Austin finally realizes what he's done to his son, the impact is devastating:  </p>  <ul>  Sir Austin could now dissect the living subject. As if a bullet had town open the young man's skull, and some blast of battle laid his palpitating organization bare, he watched every motion of his brain and his heart; and with the grief and terror of one whose mental habit was ever to pierce to extremes. Not altogether conscious that he had hitherto played with life, he felt that he was suddenly plunged into the stormful reality of it. (Vol. III, Ch. IX)  </ul>  <p>  (My analysis here was aided by Irving H. Buchen, "The Ordeal of Richard Feverel: Science Versus Nature," <i>ELH</i>, Vol. 29, No. 1 (Mar., 1962), pp. 47-66.)  </p>  <p>  George Meredith had his own personal concept of evolution, partially based on a continuum between man and animals, but on the ability of man to transcend his intelligence, not through a System like Sir Austin's but through "the creative and beneficient forces of Nature." (William R. Mueller, "Theological Dualism and the 'System' in Richard Feverel," <i>ELH</i>, Vol. 18, No. 2 (Jun., 1951), p. 139) <i>Richard Feverel</i> was written a year or so too early to incorporate directly <i>Origin of Species</i>, but it's amusing to see an allusion to Darwin's theory of sexual selection (introduced in <i>The Ascent of Man</i> in 1871) in Meredith's 1879 novel <i>The Egoist</i> (1879). Notice the tone of comic playfulness:  </p>  <ul>  A deeper student of Science than his rivals, he appreciated Nature's compliment in the fair one's choice of you. We now scientifically know that in this department of the universal struggle, success is awarded to the bettermost. You spread a handsomer tail than your fellows, you dress a finer top-knot, you pipe a newer note, have longer stride; she reviews you in competition, and selects you. The superlative is magnetic to her. She may be looking elsewhere, and you will see &#x2014; the superlative will simply have to beckon, away she glides. She cannot help herself; it is her nature, and her nature is the guarantee for the noblest races of men to come of her. In complimenting you, she is a promise of superior offspring. Science thus &#x2014; or it is better to say &#x2014; an acquaintance with science facilitates the cultivation of aristocracy. Consequently a successful pursuit and a wrestling of her from a body of competitors, tells you that you are the best man. What is more, it tells the world so. (Ch. 5)  </ul>  <p>  Charles Darwin was 50 years old when <i>The Origin of Species</i> was published in 1859; George Meredith was just 31 when <i>The Ordeal of Richard Feverel</i> was published earlier that same year. Darwin struggled with his religious beliefs; Meredith pretty much shrugged them off. As he told a friend "When I was quite a boy, I had a spasm of religion which lasted about six weeks, during which I made myself a nuisance in asking everybody whether they were saved. But never since have I swallowed the Christian fable." (quoted in Lionel Stevenson, <i>The Ordeal of George Meredith</i>, Charles Scribner's Sons, 1953, p. 14)   </p>  <p>  The two-decade difference between the births of Darwin and Meredith makes all the difference. Darwin was in his twenties when Charles Lyell's <i>Principles of Geology</i> was published and converted the Victorian reading public to ideas of an old Earth; Meredith was a child, and a member of the first generation of Englishmen comfortable with the absence of belief.   Although Meredith was at the height of his fame when he died on May 18, 1909 (just a century ago last month), he was not allowed burial in Westminster Abbey, probably because of his well-known agnosticism. A recent interview in which he indicated that marriage licenses should have a term of 10 years probably didn't help either. (Stevenson, p. 354)  </p>  <p>  When Virginia Woolf wrote about George Meredith in 1928 on the hundredth anniversary of his birth (and the same year <i>Orlando</i> was published), she noted that Meredith's reputation had declined in the two decades since his death. (Virginia Woolf had actually met Meredith in her younger years. Her father, Leslie Stephen, was a good friend of Meredith's, and a visitor to their the Stephens home.) She finds <i>The Ordeal of Richard Feverel</i> to be an "odd conglomeration" and uncovers flaws in Meredith's later novels as well. Yet, she was willing to forgive these flaws for the role Meredith played in the evolution of the English novel:  </p>  <ul>  When he wrote, in the seventies and eighties of the last century, the novel had reached a stage where it could only exist by moving onward. It is a possible contention that after those two perfect novels, <i>Pride and Prejudice</i> and <i>The Small House at Allington</i>, English fiction had to escape from the dominion of perfection, as English poetry had to escape from the perfection of Tennyson. George Eliot, Meredith, and Hardy were all imperfect novelists largely because they insisted upon introducing qualities, of thought and of poetry, that are perhaps incompatible with fiction at its most perfect. On the other henad, if fiction had remained what it was to Jane Austen and Trollope, fiction would by this time be dead. Thus Meredith deserves out gratitude and excites our interest as a great innovator. (<i>The Common Reader, Second Series</i>)  </ul>  <p>  This formulation doesn't quite work for <i>The Ordeal of Richard Feverel</i>, which was published five years before   Trollope's <i>Small House at Allingon</i>, but Meredith  has been cited as the link between <i>Tristram Shandy</i> and <i>Ulysses</i> (which actually contains a quote from <i>Richard Feverel</i>), and for this reason alone it's odd that Meredith's reputation hasn't much improved since Virginia Woolf's analysis.  </p>  <p>  It's understandable that readers find Meredith to be difficult; but it's incomprehensible why he should continue to be neglected.  </p>  <p>  <b><u>Earlier Entries in This Series</u></b>  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/01/1859-Books-Rubaiyat-of-Omar-Khayyam.html">1859 Books: “Rubáiyát of Omar Khayyám”</a> (1/15/2009)  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/02/1859-Books-George-Eliots-Adam-Bede.html">1859 Books: George Eliot’s “Adam Bede”</a> (2/1/2009)  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/02/1859-Books-John-Stuart-Mill-On-Liberty.html">1859 Books: John Stuart Mill’s “On Liberty”</a> (2/26/2009)  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/02/1859-Books-Anthony-Trollope-The-Bertrams.html">1859 Books: Anthony Trollope’s “The Bertrams”  </a> (3/29/2009)  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/04/1859-Art-Frederic-Church-The-Heart-of-the-Andes.html">1859 Art: Frederic Church’s “The Heart of the Andes”</a>  (4/27/2009)  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/05/1859-Journalism-Harriet-Martineau-Female-Industry.html">1859 Journalism: Harriet Martineau’s “Female Industry”</a>  (5/30/2009)  </p>  <p>  <a href="http://www.charlespetzold.com/blog/2009/06/1859-Science-John-Tyndall-and-the-Greenhouse-Effect.html">1859 Science: John Tyndall and the Greenhouse Effect</a>  (6/10/2009)  </p>  </content>
    <datetime>Sat, 20 Jun 2009 12:00:00 GMT</datetime>
  </item>
  <item>
    <title>To Hobart Book Village (and Beyond)</title>
    <permalink>2009/06/181202.html</permalink>
    <comments>Comments (3)</comments>
    <dateline>June 17, 2009<br />Roscoe, N.Y.</dateline>
    <content><p>  Deirdre and I are spending the summer at our little house in the Catskills, and it's mostly quite pleasant except for the stuff we take for granted in New York City, like plenty of bookstores and even a place   (<a href="http://www.jr.com/">J&amp;R</a>) that still sells classical CDs. In Sullivan County, there's only one store that sells new books   (<a href="http://www.hamishandhenry.com/">Hamish &amp; Henry</a>, which has become the center of the Sullivan County literary establishment) and &#x2014; as far as we know &#x2014; only one store that sells used books (a literacy center in Monticello).   </p>  <p>  But just over the northern county line is Delaware County, and there the bookstore situation is quite different. In fact, there's a little village called Hobart, seemingly a normal quiet community of just 390 people (as of the 2000 census), but with a shocking public display of <i>four</i> used-book stores and a couple others nearby. They call it   <a href="http://www.hobartbookvillage.com/">Hobart Book Village</a>, and it's a wonderfully strange anachronism is this age of disappearing stores where you can actually touch the books and flip through the pages before you buy them.  </p>  <p>  Today, Deirdre and I went on a used-book buying spree to quench our book-buying deprived souls. Our first stop was  Delhi, New York, a charming little village with a Wednesday morning Farmer's Market and   <a href="http://steinwaybooks.wordpress.com/"><b>Steinway Book Company</b></a>. Very neat, very clean, certainly not crowded. (These are not necessarily good qualities for a used-book store.) The store seemed strong in American history, the Civil War, and had a surprising large science section, but overall there was little depth. I left with one purchase:  </p>  <ul>  <i>The Journal of Irreproducible Results: Selected Papers</i> (3rd edition, 1986) for $6.  </ul>  <p>  Hobart is about 17 miles from Delhi. Our first stop was 698 Main Street, which houses two of Hobart's four used-book stores. Enter the front door and veer to the left for <b>Blenheim Hill Books</b>, with a nice selection on European history with a surprising number of books on the Middle Ages, and in the science section, a peculiarly large number of books by James Jeans. I picked up:  </p>  <ul>  James Jeans' <i>Physics and Philosophy</i> (1931) for $5.00.  </ul>  <ul>  A cute little 1917 edition of George Meredith's <i>The Ordeal of Richard Feverel</i> from The Modern Student's Library published by Charles Scribner's Sons for $2.00.  </ul>  <ul>  A paperback of the classic <i>1066 and All That</i> for 50¢.  </ul>  <p>  In the same building is <b>Liberty Rock Books</b>, which has good collections of history, poetry, and literary criticism, a bunch of children's books, and hundreds of postcards of New York State arranged by town. This was one of those stores where the more you looked, the more interesting books you found. I came away with:  </p>  <ul>  <i>The Year is 1851</i> by Patrick Howarth (London, 1951), which focuses much on the Great Exhibition, for $15.00.  </ul>  <ul>  <i>Swinburne: A Biographical Approach</i> by Humphrey Hare (London, 1949), which looked intriguing, for $11.50.  </ul>  <ul>  <i>Tennyson's Characters: "Strange Faces, Other Minds"</i> by David Goslee (1989) for $8.50.  </ul>  <ul>  John Tyndall's <i>Lectures on Light: Delivered in the United States in 1872-'73</i> (New York, 1873) for $25.00.  </ul>  <p>  We had lunch at the only dining establish in Hobart (The Coffee Pot) and then went across the street to   <a href="http://www.whabooks.com/"><b>Wm. H. Adams Antiquarian Books</b></a>, which is a <i>real</i> antiquarian book shop, which means that most of the stock was way out of my price range. I drooled a great deal over a beautiful leather-bound 12-volume set of the works of T. H. Huxley, but the $850 price tag meant that it remained behind.  </p>  <p>  Across the street is  <a href="http://www.hobartbookport.com/"><b>Hobart International Bookport</b></a>, which sounds rather pretentious until you realize that it does have quite a few books in foreign languages with a particular emphasis on Italian. The regular fiction section was quite adequate as well. Purchases here were:  </p>  <ul>  George Meredith's unfinished novel <i>Celt and Saxon</i> (1910), including a fold-out facsimile page of Meredith's manuscript, for $5.00.  </ul>  <ul>  <i>Queen Victoria's Secrets</i> by Adrienne Munich (1996), a cultural history of sorts "drawing upon feminist, anthropological, and postcolonial approaches", for $5.00.  </ul>  <ul>  <i>Parallel LIves: Five Victorian Marriages</i> by Phyllis Rose (1984) for $4.50.  </ul>  <ul>  <i>The Origins of the English Civil War: Conspiracy, Crusade, or Class Conflict?</i> by Philip A. M. Taylor, whose subtitle asks the same questions I do, for $3.50.  </ul>  <p>  All five of these stores &#x2014; one in Delhi and four in Hobart &#x2014; have addresses on Main Street, which in the context of these  villages is the same as Route 10. Off the beaten track &#x2014; indeed, almost as hard to find as a trendy New York City night spot &#x2014; is the famous <b>Bibliobarn</b> in South Kortright. This place is totally old school &#x2014; sprawling, over-stuffed, a veritable orgy of books on two massive floors, presided over by the ex-Virginians and (one would surmise) lifetime hippies, H.L. and Linda Wilson. This is one of those stores you can visit again and again, and never really make a dent. Be sure to check out the second floor bathroom, where they shelf books that don't fit into any normal category.   </p>  <p>  My arms were filled when I left Bibliobarn. I purchased:  </p>  <ul>  <i>Naturalism in Mathematics</i> by Penelope Maddy (1997), a sequel to her <i>Realism in Mathematics</i>, for $17.50.  </ul>  <ul>  Harriet Beecher Stowe's <i>The Minister's Wooing</i>, not quite the 1859 first edition, but very close (1860), for $12.50.  </ul>  <ul>  <i>Trollope in the Post Office</i> by R. H. Super (1981) for $12.50.  </ul>  <ul>  The December 1982 issue (Volume 37, Number 3) of the periodical <i>Nineteenth-Century Fiction</i>, an all-Trollope centennial celebration for $3.00.  </ul>  <ul>  The two volumes of <i>Alfred Lord Tennyson: A Memoir by his Son</i> (New York, 1898) for $12.50.  </ul>  <p>  It was nearly time for dinner when we drove back to the house, the back of the car dragging on the pavement loaded down with actual books made of paper, ink, glue, and other good stuff.  </p></content>
    <datetime>Wed, 17 Jun 2009 23:02:53 GMT</datetime>
  </item>
  <item>
    <title>1859 Science: John Tyndall and the Greenhouse Effect</title>
    <permalink>2009/06/1859-Science-John-Tyndall-and-the-Greenhouse-Effect.html</permalink>
    <comments>Comments (0)</comments>
    <dateline>June 10, 2009<br />Roscoe, N.Y.</dateline>
    <content><p>  On June 10, 1859 &#x2014; 150 years ago today &#x2014; British scientist John Tyndall gave a presentation before the Royal Institution describing how carbon dioxide and water vapor trap heat in the earth's atmosphere. I'll turn the telling of the rest of the story over to  Stephanie Pain in a recent issue of <i>New Scientist</i> magazine:  </p>  <p align="center">  <a href="http://www.newscientist.com/article/mg20227081.500-the-man-who-discovered-greenhouse-gases.html">The man who discovered greenhouse gases</a>  </p>  </content>
    <datetime>Wed, 10 Jun 2009 09:57:08 GMT</datetime>
  </item>
  <item>
    <title>Flax Seed Bread</title>
    <permalink>2009/06/Flax-Seed-Bread.html</permalink>
    <comments>Comments (3)</comments>
    <dateline>June 2, 2009<br />Roscoe, N.Y.</dateline>
    <content><p>  Out of all the modern appliances whose existence would be impossible without embedded processors, my favorite is undoubtedly the bread machine: Put in the ingredients (water, flour, yeast, etc), close the hatch, press the button, and in 3 to 4 hours (depending on the model) a piping hot loaf of bread can be removed and consumed.  </p>  <p>  We still use our bread machine every Sunday for making the dough for our   <a href="http://www.charlespetzold.com/etc/PizzaRecipe.html">vegetarian pizza</a> that I wrote about almost nine years ago (except that the toppings now include a vegetarian chorizo, and even sometimes a non-vegetarian pheasant sausage that we get at the Union Square Greenmarket on Saturdays) as well as &#x2014; when we plan ahead sufficiently &#x2014; bread to accompany dinner.  </p>  <p>  One of our favorite dinner breads is a Golden Flax Bread whose recipe we found on the back of a box of Milled Flax Seed made by Hodgson Mill:  </p>  <ul>  1 cup water<br />  1 tsp. salt<br />  1½ tbsp. non-fat dry milk<br />  3 tbsp. molasses<br />  2½ cups bread flour<br />  1 tbsp. vital wheat gluten<br />  ½ cup milled flax seed<br />  1½ tsp. fast-rise yeast  </ul>  <p>  Actually this is <i>not</i> the recipe as it appears on the back of the box. The recipe on the box indicates 7/8 cup water, 2 tablespoons milled flax seed, and 2 tablespoons butter, but a footnote indicates that the butter can be replaced with 6 more tablespoons of flax seed and 2 more tablespoons of water. (When doing the math, it helps if you know that there are 16 tablespoons to the cup.) Curiously, the  <a href="http://www.hodgsonmill.com/flax-bread/">recipe on the Hodgson Mill web site</a> doesn't even have that footnote!  </p>  <p>  I don't think we ever used the version with only 2 tablespoons flax seed, and I find the requirement of 7/8 cup water very peculiar. I think the recipe as I've listed the ingredients was the original, and someone at Hodgson Mill said "Hey, we can't put a recipe on the box that calls for 1/2 cup flax seed. People will think we're crazy!" So they altered the recipe accordingly, and relegated the original recipe to the footnote. That's my theory, anyway.  </p>  <p>  Do not fear using 1/2 cup milled flax seed in this recipe! Nobody's ever complained about "too much flax seed" in the bread, and the leftovers are also great for French Toast.  </p>  </content>
    <datetime>Tue, 02 Jun 2009 13:25:15 GMT</datetime>
  </item>
  <item>
    <title>1859 Journalism: Harriet Martineau’s “Female Industry”</title>
    <permalink>2009/05/1859-Journalism-Harriet-Martineau-Female-Industry.html</permalink>
    <comments>Comments (1)</comments>
    <dateline>May 30, 2009<br />Roscoe, N.Y.</dateline>
    <content><p>  If you've spent any time in Victorian England, you've undoubtedly run into Harriet Martineau. She's one of those persons who shows up everywhere there seems to be something important happening.  </p>  <p>  There she is in the summer of 1830 at the dinner party where John Stuart Mill meets Mrs. Harriet Taylor.  Two years later she can be spotted at Charles Babbage's home for a demonstration of a working component of his unfinished Calculating Engine. "All were eager to go to his glorious soirées;" she later wrote in her autobiography, "and I always thought he appeared to great advantage as a host. His patience in explaining his machine in those days was really examplary. I felt it so, the first time I saw the miracle, as it appeared to me..."   </p>  <p>  While Charles Darwin is sailing around the world aboard the <i>Beagle</i>, his older brother Erasmus is making the acquaintance of Harriet Martineau, who later spends much time with the Darwins and Wedgwoods, inspiring them with her strong anti-slavery politics. Some even think that marriage might be in the future for Erasmus Darwin and Harriet. (Harriet Martineau never married.)  </p>  <p>  When the controversial pseudo-scientific <i>Vestiges of the Natural History of Creation</i> is published anonymously in 1844, Harriet Martineau is suspected of being the author. (So is Charles Babbage, Augustus De Morgan, Charles Lyell, Charles Darwin, Lady Lovelace, and many others.) In 1845 Harriet Martineau meets the 25-year old Mary Ann Evans, and inspires the younger woman to become a professional writer and move to London, which she does to achieve great success under the pseudonym George Eliot.  </p>  <p>  All this time, Harriet Martineau is writing dozens of novels and stories, and thousands of articles for periodicals, becoming the most famous female English journalist of the 19th century.  </p>  <p>  Harriet Martineau was born in 1802 to a Unitarian household. At the age of 20 she contracted otosclerosis, and as she aged she became increasingly deaf &#x2014; requiring her to use an ear trumpet for most of her life &#x2014; with no sense of smell and a defective sense of taste. Her father's business collapsed in the financial crisis of 1825&#x2013;26, leaving the family poor and Harriet in the position of needing to earn an income. As a deaf woman, she couldn't teach and she had already been writing, so she began writing more, with fame and notoriety soon to follow.  </p>  <p>  Her <i>Illustrations of Political Economy</i> (1832&#x2014;35) consisted of nine volumes of stories that explored various concepts of economics of the sort preferred by free-trade Whigs. She traveled to America and was threatened with lynching after speaking out against slavery, writing about her experiences in the three-volume <i>Society in America</i> (1837) followed by the three-volume <i>Retrospect of Western Travel</i> (1838). She wrote books on education, mesmerism, and history, became a follower of Comte, and published <i>The Positive Philosophy of Auguste Comte, Freely Translated &amp; Condensed by Harriet Martineau</i> (1853), which was then translated back into French because her condensation and elimination of repetition managed to improve on the original.   </p>  <p>  In 1858, Harriet Martineau began writing for <i>The Edinburgh Review</i> &#x2014; standard reading for politically progressive households of the period, and one of several periodicals of the era that featured what seemed to be book reviews, but were actually long, often unsigned, essays. For the October 1858 issue, Harriet. Martineau contributed   <a href="http://books.google.com/books?id=n344PvGs960C&amp;pg=PA541">"The Slave Trade in 1858"</a>, one of her many articles about slavery.  </p>  <p>  Harriet Martineau's major contribution to the literature of 1859 was an April 1859 article for <i>The Edinburgh Review</i> focusing on another subject she was passionate about &#x2014; the political and economic mistreatment of women in   <a href="http://books.google.com/books?id=lDobAAAAYAAJ&amp;pg=PA293">"Female Industry"</a>.  </p>  <p>  "Female Industry" is a fascinating artifact, mostly for the vision it gives us of the wide scope of jobs women performed in England 150 years ago. As Harriet Martineau indicates, English law of the period assumed that "every woman is supported ... by her father, her brother, or her husband." But this was no longer the case. With the rise of the middle class, many women were working outside the home for their own subsistence, unfortunately for wages that would not allow them any type of retirement.   </p>  <p>  How many women are we talking about? Using census figures and other data, Harriet Martineau comes to a conclusion towards the end of her article that I find astonishing:  </p>  <ul>  Out of six millions of women above twenty years of age, in Great Britian, exclusive of Ireland, and of course of the Colonies, no less than half are industrial in their mode of life. More than a third, more than two millions, are independent in their industry, are self-supporting, like men."  </ul>  <p>  Apparently English men and women of the time were also astonished, following court cases that resulted from a new limited ability for women to obtain divorces that had only been in effect in England following the Matrimonial Causes Act of 1857.  </p>  <ul>  The proceedings in the new Divorce Court, and in matrimonial cases before the police-magistrates, have caused a wide-spread asonishment at the amount of female industry they have disclosed. Almost every aggrieved wife who has sought protection, has proved that she has supported her household, and has acquired property by her effective exertions.  </ul>  <p>  Toward the beginning of the article, Harriet Martineau makes it clear that for working women, "their work should be paid for by its quality, and its place in the market, irrespective of the status of the worker." She then methodically analyzes industry by industry, examining the work that women do in that industry, indicating its difficulty, and at times (when she has the data available) showing a wide discrepancy in wages between male and female workers.  </p>  <ul>  The professional dairywoman ... has been about the cows since she was tall enough to learn to milk, and her days are so filled up, that it is all she can do to keep her clothes in decent order. She drops asleep over the last stage of her work; and grows up ignorant of all other knowledge, and unskilled in all other arts. Such work as this ought at least to be paid as well as the equivalent work of men; indeed, in the dairy farms of the West of England the same labour of milking the kine is now very generally performed by men, and the Dorset milkmaid, tripping along with her pail, is, we fear, becoming a myth. But even in Cheshire the dairymaids receive, it appears, only from 8<i>l</i>. to 10<i>l</i>. a-year, with board and lodging. The superintendent of a large dairy is a salaried personage of some dignity, with two rooms, partial or entire diet, coal and candle, and wherewithal to keep a servant &#x2014; 50<i>l</i>. a year or more. But of the 64,000 dairywomen of Great Britain, scarcely any can secure a provision for the time when they can no longer lean over the cheese tub, or churn, or carry heavy weights.  </ul>  <p>  For anyone who believes that "equal pay for equal work" was a concept developed by feminists in the 1970s, Harriet Martineau's article reveals just how long this concept was successfully resisted and suppressed. Low-paid work takes an enormous toll on the women, and Martineau finds that maids of all work are particularly susceptible to medical and financial problems:  </p>  <ul>  The physician says that, on the female side of lunatic asylums, the largest class, but one, of the insane are maids of all work (the other being governesses). The causes are obvious enough: want of sufficient sleep from late and early hour, unremitting fatigue and hurry, and, even more than these, anxiety about the future from the smallness of the wages.... Too often we find that the most imbecile old nurses, the most infirm old charwomen, are the wrecks and ruins of the rosy cooks and tidy housemaids of the last generation. This ought not to be.  </ul>  <p>  "Female Industry" was published without a byline (as many articles of that era were published), and the anonymous author of the article at times speaks from a male perspective &#x2014; perhaps to sound a little more objective about the subject. (At one point the article even mentions "a letter from Harriet Martineau"!) Yet, the article does not look disapprovingly on working women. Martineau clearly feels that female industry is inevitable with the rise of the middle class. She seems to enjoy seeing women work outside the home, and argues that they be allowed to engage even in those occupations jealously guarded by the men.  </p>  <ul>  From our youth up, some of us have known how certain of the wisest and most appreciated of physicians have insisted that the health of women and their children will never be guarded as it ought to be till it is put under the charge of physicians of their own sex. The moral and emotional considerations involved in this matter need no discussion.  </ul>  <p>  Given that millions of English women were already supporting themselves by their work, it would be useless to try to stop the trend. Instead, female industry must be nurtured with education and opportunities. She concludes:  </p>  <ul>  With this new condition of affairs, new duties and new views must be accepted. Old obstructions must be removed; and the aim must be sent before us, as a nation as well as in private life, to provide for the free development and full use of the powers of every member of the community. In other words, we must improve and extend education to the utmost; and then open a fair field to the powers and energies we have educed. This will secure our welfare, nationally and in our homes, to which few elements can contribute more vitally and more richly than the independent industry of our countrywomen.  </ul>  <p>  Harriet Martineau was a woman of strong opinions, not only about political and economic issues but about religious ones. From the beginnings of her Unitarian background, her religious beliefs gradually fell away, until an outright atheism was revealed in <i>Letters on the Laws of Man's Nature and Development</i> (1851), co-authored with Henry G. Atkinson, a book that one wit summed up as "The doctrine seems to be this: There is no God, and Harriet is his phophet."  </p>  <p>  She was very ready for Charles Darwin's <i>Origin of Species</i>, published later in 1859. In one letter she wrote,  </p>  <ul>  What a book it is! &#x2014; overthrowing (if true) revealed Religion on the one hand, &amp; Natural (as far as Final Causes &amp; Design are concerned) on the other. The range &amp; mass of knowledge take away one's breath. (quoted in Adrian Desmond &amp; James Moore, <i>Darwin: The Life of a Tormented Evolutionist</i>, p. 486)  </ul>  <p>  To Darwin's cousin Fanny Wedgwood, Harriet Martineau wrote,  </p>  <ul>  One might say "thank you" all one's life without giving any idea of one's sense of obligation.... we must all be glad that he has set the world on this great new track. (quoted in Janet Browne, <i>Charles Darwin: The Power of Place</i>, p. 92)  </ul>  <p>  The only problem that Martineau found with the book was the religious terminology that Darwin seemed to use too much! As she continued in her letter to Fanny,  </p>  <ul>  I rather regret that C.D. went out of his way two or three times ... to speak of "the Creator" in the popular sense of the First Cause ... It is curious to see how those who would otherwise agree with him turn away because his view is "derived from" or "based on" "Theology" ... It seems to me that having carried us up to the earliest group of forms, or to the single primitive one, he &amp; his have nothing to do with how those few forms, or that one, come here. His subject is the "Origin of Species," &amp; not the origin of Organisation; &amp; it seems a needless mischief to have opened the latter speculation at all. &#x2014; There now! I have delivered my mind. (Desmond &amp; Moore, p. 486-7)  </ul>  <p>  Nothing, but nothing, could prevent Harriet Martineau from delivering her mind.  </p>    </content>
    <datetime>Sat, 30 May 2009 14:46:55 GMT</datetime>
  </item>
  <item>
    <title>Business Trips and Public Transportation</title>
    <permalink>2009/05/Business-Trips-and-Public-Transportation.html</permalink>
    <comments>Comments (8)</comments>
    <dateline>May 24, 2009<br />New York, NY</dateline>
    <content><p>  Whenever friends come to New York for business trips, I'm always rather surprised by their promiscuous use of taxis to get around the city. Certainly it's well known that New York City has one of the most extensive and (mostly) reliable mass transit systems in the world. It's not just for the people who live here!  </p>  <p>  Over the past several months I've been travelling to several cities in the U.S. and Canada to deliver three-day courses in WPF programming and Silverlight programming in connection with the Microsoft Metro program. Increasingly I've been trying to take advantage of public transportation systems. It's gotten to the point where &#x2014; well, to the point where it's become something of an obsession.  </p>  <p>  I don't like renting cars &#x2014; or driving at all for that matter &#x2014; so I make it a point to get a hotel within walking distance of the site where I'll be conducting the class. To a New Yorker, "walking distance" is generally anything within two miles, although I'd be willing to stretch it. I particularly like doing classes in the heart of a good walking-around city like Chicago or Vancouver, where there's also some interesting restaurants and maybe even a bookstore in the neighborhood. But I've also been able to get around by foot in Mississauga, ON and Mountain View, CA as well.  </p>  <p>  Getting to and from the airport is always interesting. Some cities excel at providing airport access via public transportation; other cities, not so much. Again, Chicago and Vancouver are great in that respect: You feel guilty of at least two deadly sins (sloth and gluttony) if you <i>don't</i> take mass transportation to and from the airport.  </p>  <p>  Obviously Web resources have become increasingly helpful in planning economical business trips.   <a href="http://www.google.com/maps">Google Maps</a> provides generally reliable walking and public transportation directions in addition to driving directions, and most cities have sites for their mass transit systems, including maps, schedules, and route-finders.  </p>  <p>  This past week I conducted a three-day Silverlight course in Dallas (more specifically, Irving) &#x2014; a city whose sporadic sidewalks and scorching sun (even in May) present some challenges to the aspiring walker.  </p>  <p>  My hotel (red marker) was actually quite close to the site of the class (blue marker), and it seemed reasonable that I could walk between them:  </p>  <p align="center">  <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=110570285110626046572.00046aaaa22ba98f90946&amp;t=h&amp;ll=32.8953,-96.964817&amp;spn=0.025224,0.036478&amp;z=14&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=110570285110626046572.00046aaaa22ba98f90946&amp;t=h&amp;ll=32.8953,-96.964817&amp;spn=0.025224,0.036478&amp;z=14&amp;source=embed" style="color:#0000FF;text-align:left">Class and Hotel</a> in a larger map</small>  </p>  <p>  When I zoomed in on the map, going via N. MacArthur Blvd seemed best, yet I couldn't see any sidewalks on an overpass I'd have to take, and that made me nervous. For the public transportation option, Google Maps recommended the DART (Dallas Area Rapid Transit) bus 308, which was a fairly direct route on N. MacArthur Blvd, but it wasn't clear to me that I could even reach the bus stop on the hotel side.  </p>  <p>  After spending way too much time on the   <a href="http://www.dart.org">DART site</a>, I found a more foolproof bus strategy, via the North Irving Transit Center (green marker), one of several DART hubs that allow transfers from route to route:   </p>  <p align="center">  <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms? ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=110570285110626046572.00046aaaa22ba98f90946&amp;t=h&amp;ll=32.8953,-96.964817&amp;spn=0.025224,0.036478&amp;z=13&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.com/maps/ms?hl=en&amp;ie=UTF8&amp;msa=0&amp;msid=110570285110626046572.00046aaaa22ba98f90946&amp;t=h&amp;ll=32.8953,-96.964817&amp;spn=0.025224,0.036478&amp;z=13&amp;source=embed" style="color:#0000FF;text-align:left">Class and Hotel</a> in a larger map</small>  </p>  <p>  I could catch the 301 bus right outside my hotel, take it to the North Irving Transit Center, where I could transfer to the 310 bus that stopped at West Royal Lane and Sierra, which was then a simple walk to the building where the class took place.  </p>  <p>  Moreover, the 310 bus also serviced the North Remote Parking area of the Dallas Fort Worth airport.  That clinched it. When my trip began on Tuesday, I got to LaGuardia Airport by the standard method (the uptown N train connecting with the M60 bus in Queens for a $2.00 fare), and when I arrived at DFW, I took the free shuttle to the North Remote Parking area, and I was ready for the 310 bus with my three dollars in singles to purchase a DART Day Pass:  </p>  <p align="center">  <img src="http://www.charlespetzold.com/blog/2009/05/DartDayPass.png" />  </p>  <p>  I took the 310 from the airport directly to the class site to set up my stuff on the machines. Then I hopped on the 310 again, transferred to the 301 at the North Irving Transit Center, and checked into my hotel. At that point, I knew the two lines I needed: In the mornings I bought a Day Pass and took the eastbound 301 and westbound 310, reversing the trip in the evening.  </p>  <p>  I found the buses rather underutilized &#x2014; at least the ones I took. I don't think I was ever in a bus that was more than half full. They don't run very frequently: Generally about every 30 minutes during rush hour, and every hour otherwise. Most single trips on the DART cost $1.50 (less than the New York City rate of $2.00) but there's no free transfer between buses. That's where the $3.00 day pass comes in handy.   </p>  <p>  The buses indicate the next stop with an LED display, apparently triggered by GPS. It's roughly accurate, and only once did the bus go by my stop without alerting me it was coming up. Many of the bus stops are just poles stuck in the grass, so you really need some sense of what direction you're going so you know which side of the street to wait on.   </p>  <p>  The only time I really got into trouble was one evening when I took the 428 into Dallas to have dinner at a Red Lobster, and then couldn't figure out how to get back. I probably should have realized I was entering a confusing bus zone when the map contained a "helpful" insert for my destination that looked like this:  </p>  <p align="center">  <img src="http://www.charlespetzold.com/blog/2009/05/428Insert.png" />  </p>  <p>  On the last day of class, one of the developers attending the class offered to drive me back to my hotel, and I could see for the first time the overpass I would have navigated if I had walked between the hotel and class. The overpass wasn't quite as accomodating to pedestrians as a New York City bridge, but I really could have walked between hotel and class had I been willing to tramp over beautifully manicured lawns and not minded cars buzzing close by.   </p>  <p>  As my Saturday departure date approached, it slowly dawned on me that the 310 bus I had taken from DFW does not run on weekends. Fortunately the only other bus to the airport (the 408) does not have that shocking deficiency and it connects with the westbound 301. The morning of my flight, the 301 was a little late, and I missed the 408 and had to wait 45 minutes for the next one, reinforcing the two rules of using public transportation:  </p>  <ul><li>Give yourself plenty of time.</li></ul>  <ul><li>Have something to read.</li></ul>  <p>  When I arrived at LaGuardia, I caught the M60 bus and the N train back to my apartment.  </p>  <p>  Total non-flight transportation costs for the whole trip: $19.00.   </p>  <p>  Exploring the apparently obscure Dallas mass-transit system: Priceless.  </p></content>
    <datetime>Sun, 24 May 2009 14:47:08 GMT</datetime>
  </item>
  <item>
    <title>Realizing a Fisheye Effect in Silverlight</title>
    <permalink>2009/05/Realizing-a-Fisheye-Effect-in-Silverlight.html</permalink>
    <comments>Comments (1)</comments>
    <dateline>May 18, 2009<br />New York, N.Y.</dateline>
    <content><p>  I've been experimenting recently with implementing a "fisheye" effect in Silverlight &#x2014; the effect where a control grows larger as the mouse passes over it. I knew that it wouldn't be as simple as in the Windows Presentation Foundation, but I wanted something at least comparable. In the process I came upon several approaches, some involving the Visual State Manager.   </p>  <p>  <b><u>Fisheye Buttons in WPF</u></b>  </p>  <p>  In WPF, a fisheye effect can be implemented entirely in markup, as demonstrated by two XAML files from the 75-page chapter on animation in my book   <a href="http://www.charlespetzold.com/wpf"><i>Applications = Code + Markup</i></a>. Here's the FishEyeButtons1.xaml file:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;StackPanel&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;StackPanel.Resources&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style&#x00A0;TargetType="{x:Type&#x00A0;Button}"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="HorizontalAlignment"&#x00A0;Value="Center"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="FontSize"&#x00A0;Value="12"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;EventTrigger&#x00A0;RoutedEvent="Button.MouseEnter"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="36"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/EventTrigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;EventTrigger&#x00A0;RoutedEvent="Button.MouseLeave"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="12"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/EventTrigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/StackPanel.Resources&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;1&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;2&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;3&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;4&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;5&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;6&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;7&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;8&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;9&lt;/Button&gt;<br />  &lt;/StackPanel&gt;<br />  </p>  <p>  The file uses an implicit style to set an initial <i>FontSize</i> property on the buttons, and then animates that property based on the <i>MouseEnter</i> and <i>MouseLeave</i> routed events. If you have .NET 3.X installed, you can run the XAML file here:  </p>  <p align="center">  <a href="http://www.charlespetzold.com/blog/2009/05/FishEyeButtons1.xaml">FishEyeButtons1.xaml</a>  </p>  <p>  The FishEyeButtons2.xaml file is similar except it uses a trigger based on the <i>IsMouseOver</i> property rather than event triggers:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;StackPanel&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;StackPanel.Resources&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style&#x00A0;TargetType="{x:Type&#x00A0;Button}"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="HorizontalAlignment"&#x00A0;Value="Center"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="FontSize"&#x00A0;Value="12"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Trigger&#x00A0;Property="IsMouseOver"&#x00A0;Value="True"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Trigger.EnterActions&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="36"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Trigger.EnterActions&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Trigger.ExitActions&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="12"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Trigger.ExitActions&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Trigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/StackPanel.Resources&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;1&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;2&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;3&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;4&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;5&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;6&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;7&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;8&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;9&lt;/Button&gt;<br />  &lt;/StackPanel&gt;</p>  <p>  You can run this one here:  </p>  <p align="center">  <a href="http://www.charlespetzold.com/blog/2009/05/FishEyeButtons2.xaml">FishEyeButtons2.xaml</a>  </p>  <p>  The <i>FontSize</i> property is certainly not the best property to animate to achieve this effect, but it does the job when the <i>Button</i> content is text. To make the animation more efficient and workable with other forms of content besides text, it's better to animate a <i>ScaleTransform</i> set on the button's <i>LayoutTransform</i> property, like the following program (not from my book):  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;StackPanel&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;StackPanel.Resources&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style&#x00A0;TargetType="{x:Type&#x00A0;Button}"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="HorizontalAlignment"&#x00A0;Value="Center"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="FontSize"&#x00A0;Value="12"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="LayoutTransform"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter.Value&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;ScaleTransform&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Setter.Value&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Setter&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;EventTrigger&#x00A0;RoutedEvent="Button.MouseEnter"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="LayoutTransform.ScaleX"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="3"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="LayoutTransform.ScaleY"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="3"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/EventTrigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;EventTrigger&#x00A0;RoutedEvent="Button.MouseLeave"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="LayoutTransform.ScaleX"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="1"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="LayoutTransform.ScaleY"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="1"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/EventTrigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/StackPanel.Resources&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;1&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;2&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;3&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;4&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;5&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;6&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;7&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;8&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;9&lt;/Button&gt;<br />  &lt;/StackPanel&gt;<br />  <br />  </p>  <p>  You can run it here:  </p>  <p align="center">  <a href="http://www.charlespetzold.com/blog/2009/05/FishEyeButtons3.xaml">FishEyeButtons3.xaml</a>  </p>  <p>  The switch to animating a <i>ScaleTransform</i> seems to double the number of animations, but perhaps not. You can define a <i>Binding</i> on the <i>ScaleTransform</i> between the <i>ScaleX</i> and <i>ScaleY</i> properties to eliminate one of the animations:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;StackPanel&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;StackPanel.Resources&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style&#x00A0;TargetType="{x:Type&#x00A0;Button}"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="HorizontalAlignment"&#x00A0;Value="Center"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="FontSize"&#x00A0;Value="12"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter&#x00A0;Property="LayoutTransform"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Setter.Value&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;ScaleTransform<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ScaleY="{Binding&#x00A0;RelativeSource={RelativeSource&#x00A0;self},<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Path=ScaleX}"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Setter.Value&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Setter&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;EventTrigger&#x00A0;RoutedEvent="Button.MouseEnter"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="LayoutTransform.ScaleX"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="3"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/EventTrigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;EventTrigger&#x00A0;RoutedEvent="Button.MouseLeave"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="LayoutTransform.ScaleX"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="1"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/BeginStoryboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/EventTrigger&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style.Triggers&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Style&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/StackPanel.Resources&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;1&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;2&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;3&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;4&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;5&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;6&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;7&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;8&lt;/Button&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&gt;Button&#x00A0;No.&#x00A0;9&lt;/Button&gt;<br />  &lt;/StackPanel&gt;<br />  <br />  </p>  <p>  That one is runnable here:  </p>  <p align="center">  <a href="http://www.charlespetzold.com/blog/2009/05/FishEyeButtons4.xaml">FishEyeButtons4.xaml</a>  </p>  <p>  <b><u>Silverlight Fisheye: Version 1</u></b>  </p>  <p>  But enough about WPF! How do we do it Silverlight? Silverlight is missing two features that ease the job in WPF: Triggers and the <i>LayoutTransform</i> property. Compensating for these deficiencies is what makes the Silverlight job more challenging (and therefore fun).  </p>  <p>  One reasonable approach is to create the animations entirely in code. You might have several buttons defined in XAML with event handlers for <i>MouseEnter</i> and <i>MouseLeave</i>:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;Button&#x00A0;Style="{StaticResource&#x00A0;btnStyle}"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Content="Button&#x00A0;No.&#x00A0;1"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MouseEnter="OnButtonMouseEnter"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MouseLeave="OnButtonMouseLeave"&#x00A0;/&gt;  <br /><br />...<br /><br />  &lt;Button&#x00A0;Style="{StaticResource&#x00A0;btnStyle}"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Content="Button&#x00A0;No.&#x00A0;9"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MouseEnter="OnButtonMouseEnter"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MouseLeave="OnButtonMouseLeave"&#x00A0;/&gt;<br />  </p>  <p>  The two events are implemented in code to create and fire animations. As in the WPF version, these animations target a <i>FontSize</i> property initially set to 12:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  void&#x00A0;OnButtonMouseEnter(object&#x00A0;sender,&#x00A0;MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;DoubleAnimation&#x00A0;anima&#x00A0;=&#x00A0;new&#x00A0;DoubleAnimation();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;anima.To&#x00A0;=&#x00A0;36;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;anima.Duration&#x00A0;=&#x00A0;new&#x00A0;Duration(TimeSpan.FromSeconds(1));<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTarget(anima,&#x00A0;sender&#x00A0;as&#x00A0;Button);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTargetProperty(anima,&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;new&#x00A0;PropertyPath("FontSize"));<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard&#x00A0;storyboard&#x00A0;=&#x00A0;new&#x00A0;Storyboard();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;storyboard.Children.Add(anima);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;storyboard.Begin();<br />  }<br />  <br />  void&#x00A0;OnButtonMouseLeave(object&#x00A0;sender,&#x00A0;MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;DoubleAnimation&#x00A0;anima&#x00A0;=&#x00A0;new&#x00A0;DoubleAnimation();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;anima.To&#x00A0;=&#x00A0;12;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;anima.Duration&#x00A0;=&#x00A0;new&#x00A0;Duration(TimeSpan.FromSeconds(0.25));<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTarget(anima,&#x00A0;sender&#x00A0;as&#x00A0;Button);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTargetProperty(anima,<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;new&#x00A0;PropertyPath("FontSize"));<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard&#x00A0;storyboard&#x00A0;=&#x00A0;new&#x00A0;Storyboard();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;storyboard.Children.Add(anima);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;storyboard.Begin();<br />  }<br />  </p>  <p>  You can download the whole   <a href="http://www.charlespetzold.com/blog/2009/05/FisheyeButtons.zip">FisheyeButtons project</a>. The Visual Studio solution consists of one web project (FisheyeButtons.Web) and six Silverlight projects, FisheyeButtons1 through FisheyeButtons6. You can run all six versions from this web page:  </p>  <p align="center">  <a href="http://www.charlespetzold.com/silverlight/FisheyeButtons">FisheyeButtons.html</a>  </p>  <p>  <b><u>Silverlight Fisheye: Version 2</u></b>  </p>  <p>  Generally in Silverlight, you define an animation <i>Storyboard</i> in a <i>Resources</i> section of a XAML file. The code behind file then merely has the job of accessing the <i>Storyboard</i> and calling <i>Begin</i> on it. But that approach has a problem when implementing a fisheye effect on multiple buttons. You can see that problem in this second version.  </p>  <p>  The XAML file includes a <i>Resources</i> section with two animation storyboards:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;Storyboard&#x00A0;x:Name="growAnimation"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="36"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &lt;/Storyboard&gt;<br />  &lt;Storyboard&#x00A0;x:Name="shrinkAnimation"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="12"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &lt;/Storyboard&gt;<br />  </p>  <p>  But keep in mind that resources are shared. There will be only one instance of the <i>shrinkAnimation</i> storyboard and one instance of the <i>growAnimation</i> storyboard, and those will be shared among all the buttons. The events handlers for the <i>MouseEnter</i> and <i>MouseLeave</i> events must stop any animations currently in progress using that storyboard and set a new target object before beginning the animation:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  void&#x00A0;OnButtonMouseEnter(object&#x00A0;sender,&#x00A0;MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;growAnimation.Stop();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTarget(growAnimation.Children[0],<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;sender&#x00A0;as&#x00A0;Button);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;growAnimation.Begin();<br />  }<br />  <br />  void&#x00A0;OnButtonMouseLeave(object&#x00A0;sender,&#x00A0;MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;shrinkAnimation.Stop();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTarget(shrinkAnimation.Children[0],<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;sender&#x00A0;as&#x00A0;Button);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;shrinkAnimation.Begin();<br />  }<br />  </p>  <p>  It's fine to share the single <i>growAnimation</i> storyboard among all the buttons, but sharing <i>shrinkAnimation</i> means that only one button can be shrinking at any time. If you slowly move the mouse from one button to the next, buttons will grow and shrink as expected. But if you quickly move the mouse over the buttons, you'll see some buttons snap back to their original positions. That's the result of sharing the <i>shrinkAnimation</i>, and it's simply not a good solution.  </p>  <p>  <b><u>Silverlight Fisheye: Version 3</u></b>  </p>  <p>  The third version derives a new class called <i>FisheyeButton</i> from <i>Button</i>. The XAML file contains only a <i>Resources</i> section with two <i>Storyboard</i> objects:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;Button&#x00A0;x:Class="FisheyeButtons3.FisheyeButton"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button.Resources&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&#x00A0;x:Name="growAnimation"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="36"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&#x00A0;x:Name="shrinkAnimation"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="12"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Button.Resources&gt;<br />  &lt;/Button&gt;<br />  </p>  <p>  Unfortunately, there's not a good way to set the <i>TargetName</i> in the <i>Storyboard</i> when that name must refer to the object in which the storyboards are defined. Instead, the code-behind for the <i>OnMouseEnter</i> and <i>OnMouseLeave</i> methods manually set the <i>Storyboard</i> target:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  protected&#x00A0;override&#x00A0;void&#x00A0;OnMouseEnter(MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;DoubleAnimation&#x00A0;anima&#x00A0;=&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;growAnimation.Children[0]&#x00A0;as&#x00A0;DoubleAnimation;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;growAnimation.Stop();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTarget(anima,&#x00A0;this);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;growAnimation.Begin();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;base.OnMouseEnter(args);<br />  }<br />  <br />  protected&#x00A0;override&#x00A0;void&#x00A0;OnMouseLeave(MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;DoubleAnimation&#x00A0;anima&#x00A0;=<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;shrinkAnimation.Children[0]&#x00A0;as&#x00A0;DoubleAnimation;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;shrinkAnimation.Stop();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.SetTarget(anima,&#x00A0;this);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;shrinkAnimation.Begin();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;base.OnMouseLeave(args);<br />  }<br />  </p>  <p>  Even though these animations are not shared among multiple objects, they still must be manually stopped before being begun again. Without that <i>Stop</i> call, it'll work right the first time, but not subsequently.  </p>  <p>  Moreover, deriving from <i>Button</i> for this job is not really the way to go. For a decent fisheye button that works with content other than text, you'll want to add more markup to the visual tree, and that's more conveniently done by deriving from <i>UserControl</i>  </p>  <p>  <b><u>Silverlight Fisheye: Version 4</u></b>  </p>  <p>  This fourth version creates a new class again named <i>FisheyeButton</i>, but this time derived from <i>UserControl</i>:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;UserControl&#x00A0;x:Class="FisheyeButtons4.FisheyeButton"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;UserControl.Resources&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&#x00A0;x:Name="growAnimation"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetName="btn"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="36"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&#x00A0;x:Name="shrinkAnimation"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetName="btn"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="12"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/UserControl.Resources&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Grid&#x00A0;x:Name="LayoutRoot"&#x00A0;Background="White"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&#x00A0;Name="btn"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Click="OnButtonClick"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Grid&gt;<br />  &lt;/UserControl&gt;<br />  </p>  <p>  Now there's a <i>Button</i> in the visual tree, and the two animations can explicitly target that <i>Button</i> object. The code-behind for the <i>OnMouseEnter</i> and <i>OnMouseLeave</i> overrides becomes trivial:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  protected&#x00A0;override&#x00A0;void&#x00A0;OnMouseEnter(MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;growAnimation.Begin();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;base.OnMouseEnter(args);<br />  }<br />  <br />  protected&#x00A0;override&#x00A0;void&#x00A0;OnMouseLeave(MouseEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;shrinkAnimation.Begin();<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;base.OnMouseLeave(args);<br />  }<br />  </p>  <p>  However, the code-behind file becomes rather larger because <i>FisheyeButton</i> has to implement some kind of substitute for the button's <i>Content</i> property &#x2014; a property I called <i>ButtonContent</i> &#x2014; and also duplicate the <i>Click</i> event of the button. Those requirements apply to subsequent versions as well.  </p>  <p>  <b><u>Silverlight Fisheye: Version 5</u></b>  </p>  <p>  Although the Visual State Manager classes are normally found in templates, they can also be used in <i>UserControl</i> derivatives, and that's demonstrated by this fifth version. The &lt;vsm:VisualStateManager.VisualStateGroups&gt; tag must be a child of the outermost element of the visual tree set to the <i>Content</i> property of the <i>UserControl</i>:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  &lt;UserControl&#x00A0;x:Class="FisheyeButtons5.FisheyeButton"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Grid&#x00A0;x:Name="LayoutRoot"&#x00A0;Background="White"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;vsm:VisualStateManager.VisualStateGroups&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;vsm:VisualStateGroup&#x00A0;x:Name="CommonStates"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;vsm:VisualState&#x00A0;x:Name="Normal"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetName="btn"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="12"&#x00A0;Duration="0:0:0.25"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/vsm:VisualState&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;vsm:VisualState&#x00A0;x:Name="MouseOver"&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;DoubleAnimation&#x00A0;Storyboard.TargetName="btn"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Storyboard.TargetProperty="FontSize"<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;To="36"&#x00A0;Duration="0:0:1"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Storyboard&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/vsm:VisualState&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/vsm:VisualStateGroup&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/vsm:VisualStateManager.VisualStateGroups&gt;<br />  <br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;Button&#x00A0;Name="btn"&#x00A0;/&gt;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&lt;/Grid&gt;<br />  &lt;/UserControl&gt;<br />  </p>  <p>  The code-behind file is pretty much the same as in the previous version, except the <i>OnMouseEnter</i> and <i>OnMouseLeave</i> overrides call the state <i>GoToState</i> method:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  protected&#x00A0;override&#x00A0;void&#x00A0;OnMouseEnter(MouseEventArgs&#x00A0;e)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;VisualStateManager.GoToState(this,&#x00A0;"MouseOver",&#x00A0;false);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;base.OnMouseEnter(e);<br />  }<br />  <br />  protected&#x00A0;override&#x00A0;void&#x00A0;OnMouseLeave(MouseEventArgs&#x00A0;e)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;VisualStateManager.GoToState(this,&#x00A0;"Normal",&#x00A0;false);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;base.OnMouseLeave(e);<br />  }<br />  </p>  <p>  <b><u>Silverlight Fisheye: Version 6</u></b>  </p>  <p>  Finally it's time to stop animating the <i>FontSize</i> property and switch to animating something more generalized that can also be used with content other than text!  </p>  <p>  But this is where Silverlight's lack of a <i>LayoutTransform</i> becomes very painful. Sure, you could set the <i>RenderTransform</i> property of the <i>Button</i> to a <i>ScaleTransform</i> and animate that, but the <i>Button</i> would merely grow and shrink in size: It would not push the other buttons aside. You really want the new size of the <i>Button</i> to be respected in layout.  </p>  <p>  Although Silverlight does not itself have a <i>LayoutTransform</i> property, the indispensable   <a href="http://www.codeplex.com/Silverlight">Silverlight toolkit</a> has a handy <i>LayoutTransformer</i> element that can enclose other elements and apply transforms to them that work much like <i>LayoutTransform</i>.  </p>  <p>  But if you try using <i>LayoutTransformer</i> for this job, you'll discover another problem: <i>LayoutTransformer</i> is not notified when properties of its attached transform are being modified, and hence cannot respond to animations! This is really due to another big Silverlight deficiency &#x2014; the <i>Freezable</i> class, which in WPF implements sub-property notifications. (As <a href="http://www.bluespire.com/blogs">Rob Eisenberg</a> commented in one of my   <a href="http://www.charlespetzold.com/blog/2008/11/Text-on-a-Path-in-Silverlight.html">previous blog entries</a>, "The absence of Freezable is pretty much the source of all evil in Silverlight.")  </p>  <p>  Of course, David Anson, the author of <i>LayoutTransformer</i> is well aware of this limitation, and he's offered a solution in a blog entry entitled <a href="http://blogs.msdn.com/delay/archive/2009/04/09/a-bit-more-than-meets-the-eye-easily-animate-layouttransformer-with-animationmediator.aspx">A bit more than meets the eye</a>.  </p>  <p>  Although I played around with his work-around, I wasn't entirely happy. After I created the third and fourth versions of the WPF fisheye button shown above, I came to the conclusion that I didn't like it. I don't think that the whole button (including its chrome and border) should grow and shrink. I think the <i>content</i> of the button should be changing size, and the button should accomodate that content. For that reason (and to make things interesting for myself) I decided to pursue a different approach involving deriving from <i>ContentPresenter</i>, which I suspect is fairly rare.   </p>  <p>  If you've never written a template for a <i>ContentControl</i> derivative, you've probably never encountered <i>ContentPresenter</i>, but it's the thing that all <i>ContentControl</i> objects contain to display the content of the control.  </p>  <p>  My derived class is called <i>ScalableContentPresenter</i>. It sets its own <i>RenderTransform</i> property to a <i>ScaleTransform</i> object stored as a field named <i>xform</i> and defines two dependency properties named <i>ScaleX</i> and <i>ScaleY</i>. When either of these two properties changes, the property-changed handler sets the corresponding properties of that <i>ScaleTransform</i>:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  static&#x00A0;void&#x00A0;OnScaleChanged(DependencyObject&#x00A0;obj,&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;DependencyPropertyChangedEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;ScalableContentPresenter&#x00A0;scaler&#x00A0;=&#x00A0;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;obj&#x00A0;as&#x00A0;ScalableContentPresenter;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;scaler.xform.ScaleX&#x00A0;=&#x00A0;scaler.ScaleX;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;scaler.xform.ScaleY&#x00A0;=&#x00A0;scaler.ScaleY;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;scaler.InvalidateMeasure();<br />  }<br />  </p>  <p>  Scaling its own <i>RenderTransform</i> causes this <i>ScalableContentPresenter</i> to become larger, but that new size is not reflected in layout. But notice the call to <i>InvalidateMeasure</i>. That call initiates a new layout pass resulting in a call to <i>MeasureOverride</i>, which <i>ScalableContentPresenter</i> handles like so:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  protected&#x00A0;override&#x00A0;Size&#x00A0;MeasureOverride(Size&#x00A0;availableSize)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;Size&#x00A0;desiredSize&#x00A0;=&#x00A0;base.MeasureOverride(availableSize);<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;desiredSize.Width&#x00A0;*=&#x00A0;ScaleX;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;desiredSize.Height&#x00A0;*=&#x00A0;ScaleY;<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;return&#x00A0;desiredSize;<br />  }<br />  </p>  <p>  It simply calls the <i>MeasureOverride</i> in the base class (<i>ContentPresenter</i> itself) and then bumps that returned size up or down based on its <i>ScaleX</i> and <i>ScaleY</i> properties.  </p>  <p>  The XAML file for <i>FisheyeButton</i> still has a fairly simple visual tree, consisting of a <i>Button</i> enclosing a <i>ScalableContentPresenter</i>. This <i>ScalableContentPresenter</i> does not replace the button's normal <i>ContentPresenter</i>. Instead, that <i>ContentPresenter</i> will have as its content this <i>ScalableContentPresenter</i>.  </p>  <p>  The <i>Storyboard</i> objects now contain animations that target the <i>ScaleX</i> and <i>ScaleY</i> properties of the <i>ScalableContentPresenter</i>  </p>  <p>  The code-behind file is pretty much the same as in the previous version with one crucial difference: When the <i>ButtonContent</i> property changes, the property-changed handler doesn't set <i>Content</i> property of the <i>Button</i>, but instead sets the <i>Content</i> property of the <i>ScalableContentPresenter</i>:  </p>  <p style='font-family: monospace; font-weight:bold; font-size:smaller; background-color:AliceBlue'>  static&#x00A0;void&#x00A0;OnButtonContentChanged(DependencyObject&#x00A0;sender,<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;DependencyPropertyChangedEventArgs&#x00A0;args)<br />  {<br />  &#x00A0;&#x00A0;&#x00A0;&#x00A0;(sender&#x00A0;as&#x00A0;FisheyeButton).presenter.Content&#x00A0;=&#x00A0;args.NewValue;<br />  }<br />  </p>  <p>  Obviously this is my preferred approach to implementing fisheye buttons in Silverlight, but I don't think I could have arrived here in a single step.  </p>  </content>
    <datetime>Mon, 18 May 2009 15:59:54 GMT</datetime>
  </item>
  <item>
    <title>Ursula Le Guin’s Faux Pas</title>
    <permalink>2009/05/Ursula-Le-Guin-Faux-Pas.html</permalink>
    <comments>Comments (15)</comments>
    <dateline>May 13, 2009<br />New York, N.Y.</dateline>
    <content><p>  According to yesterday's <i>New York Times</i> (5/12/09, B1), science fiction writer Ursula Le Guin recently found one of her books posted on the internet:  </p>  <blockquote>  “I thought, who do these people think they are?” Ms. Le Guin said. “Why do they think they can violate my copyright and get away with it?”  </blockquote>  <p>  It's a rookie mistake. Seasoned victims of piracy know that nothing inflames the hornets more than denying their right to freely download and share all forms of media.  </p>  <p>  But certainly Ms. Le Guin's initial reaction is understandable. The first time you see your book posted on the web, it's equivalent to the sensation of being shat upon. As the years pass by, however, and it happens more and more, you realize there's not a damn thing you can do about it, and the initial insult modulates to the somewhat less offensive feeling of merely being sprayed with spittle.   </p>  <p>  The best thing to do is to just keep your mouth shut. Try instead to cherish those ever-dwindling readers whose curious morals persuade them to buy books rather than download them, and who thereby thank the author with kindly hug.  </p>  </content>
    <datetime>Wed, 13 May 2009 11:53:45 GMT</datetime>
  </item>
  <item>
    <title>1859 Art: Frederic Church’s “The Heart of the Andes”</title>
    <permalink>2009/04/1859-Art-Frederic-Church-The-Heart-of-the-Andes.html</permalink>
    <comments>Comments (3)</comments>
    <dateline>April 27, 2009<br />New York, N.Y.</dateline>
    <content><p>  On April 27, 1859 &#x2014; 150 years ago today &#x2014;  Frederic Edwin Church's mammoth landscape painting <i>The Heart of the Andes</i> went on display in a private showing in Lyric Hall at 765 Broadway in New York City. The painting was then moved back to the Studio Building (West Tenth Streeth between Fifth and Sixth Avenues) where Church had painted the work, and it opened to the public on April 29.   </p>  <p>  Over the next three weeks, over 12,000 people paid 25&#x00A2; apiece to see the <i>The Heart of the Andes</i>. The painting was mounted in a large recessed dark walnut frame, and surrounded with dark curtains to mask extraneous light, making it seem almost as if it were a window into a world far from West Tenth Street. Some viewers used opera glasses to bring details of the painting into closer view, fascinated by the wealth of detail and precision from the snow-capped mountains in the distance to the steamy vegetation in the foreground. Two effusive pamphlets about the painting were available for purchase, written by friends of Church.  </p>  <p>  Following its New York City triumph, <i>The Heart of the Andes</i> then toured Europe, and came back to the United States for trips to Boston, Philadelphia, Baltimore, Cincinatti, Chicago, and St. Louis, where the 26-year old Samuel Clemens saw it three times, and gushed in a letter:  </p>  <ul>  I have just returned from a visit to the most wonderfully beautiful painting which this city has ever seen &#x2014; Church's "Heart of the Andes." ... We took the opera glass, and examined its beauties minutely, for the naked eye cannot discern the little wayside flowers, and soft shadows and patches of sunshine, and half-hidden bunches of grass and jets of water which form some of its most enchanting features. (quoted in Avery, <i>Church's Great Picture</i>, 43)  </ul>  <p>  By this time <i>The Heart of the Andes</i> had been sold for $10,000, at that time the highest amount ever paid for a work by a living American artist. Frederic Church's painting seemed to herald a new age of American art that would incorporate accurate observations of the natural world, and scientific precision in rendering that world, uniting art and science in a powerful spiritual synthesis.  </p>  <p>  Web conventions mandate that I now drop in an <i>img</i> tag so you can see <i>The Heart of the Andes</i> without moving a muscle, like so:  </p>  <p align="center">  &lt;img src="http://antiquesandfineart.com/articles/media/images/00801-00900/00855/The_Heart_of_the_Andes.jpg" /&gt;  </p>  <p>  But I just can't do it. You <i>will</i> need to move a muscle to see <i>The Heart of the Andes</i>. The painting is 10 feet wide and 5&#x00BD; feet tall, so even a moderately large JPEG provides only a feeble approximation of the actual experience. You may as well listen to a Mahler symphony played on a kazoo, or watch <i>Citizen Kane</i> on a TV set.  </p>  <p>  Fortunately <i>The Heart of the Andes</i> isn't hidden in a private collection or tucked away in some obscure museum. It's part of the permanent collection of the Metropolitan Museum of Art in New York City (a museum that Church helped found in 1870), and currently on display with eight other large American landscapes in the newly renovated Robert Lehman Wing, straight back on the first floor.  </p>  <p>  Frederic Edwin Church (1826 &#x2013; 1900) was born to a well-to-do family in Hartford, Connecticut, and at the age of 18 became one of the rare students of the founder of the Hudson River School of painting, Thomas Cole (1801 &#x2013; 1848), whose influence can be discerned throughout Church's career.  </p>  <p>  The second most powerful influence on Church was not a painter at all but a famous German naturalist and popularizer of science, Alexander von Humboldt (1769 &#x2013; 1859). Humboldt's early desires to study geology in Europe were thwarted by the Napoleonic Wars, so he instead journeyed to South America, which he explored for five years from 1799 to 1804, performing scientific experiments, making maps, documenting weather conditions, sketching the geology and wildlife, and almost &#x2014; but not quite &#x2014; making it to the summit of Mount Chimborazo in Ecuador, at the time believed to be the tallest mountain in the world.  </p>  <p>  Humboldt spent much of the rest of his life writing, including compiling the data he had accumulated from his years in South America into a multi-volume treatise, some of which was published in seven volumes in an English translation as <i>Personal Narrative of Travels to the Equinoctial Regions of the New Continent During the Years 1799 &#x2013; 1804</i>. Even more ambitious was Humboldt's all-encompassing description of the universe and the earth in five volumes called <i>Kosmos</i>. Published in German beginning in 1845, <i>Kosmos</i> was soon translated into many other languages, becoming one of the most popular and influential science books of its time.  </p>  <p>  It was Humboldt's <i>Personal Narrative</i> that got the young Charles Darwin (1809 &#x2013; 1882) excited about exploring faraway exotic lands. That book together with John Herschel's <i>Introduction to the Study of Natural Philosophy</i> "stirred up in me a burning zeal to add even the most humble contribution to the noble structure 