<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Silverlight &#124; WPF &#124; Microsoft.Net &#187; TargetedTriggerAction</title>
	<atom:link href="http://joel.neubeck.net/tag/targetedtriggeraction/feed/" rel="self" type="application/rss+xml" />
	<link>http://joel.neubeck.net</link>
	<description>Simplifing structure without changing results</description>
	<lastBuildDate>Fri, 01 Apr 2011 21:34:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Control Visibility with triggers</title>
		<link>http://joel.neubeck.net/2009/08/control-visibility-with-triggers/</link>
		<comments>http://joel.neubeck.net/2009/08/control-visibility-with-triggers/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 21:30:10 +0000</pubDate>
		<dc:creator>joel</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[CheckBox]]></category>
		<category><![CDATA[ComboBox]]></category>
		<category><![CDATA[ListBox]]></category>
		<category><![CDATA[Silverlight 3]]></category>
		<category><![CDATA[TargetedTriggerAction]]></category>

		<guid isPermaLink="false">http://joel.neubeck.net/2009/08/control-visibility-with-triggers/</guid>
		<description><![CDATA[I absolutely love writing triggers for Silverlight 3.&#160; As UX developers we often faced with the challenge of finding ways to fit a ton of information on a single user input screen.&#160; On occasion, some of that information may only be relevant to display if users have made certain choices on the interface: checking a [...]]]></description>
			<content:encoded><![CDATA[<p>I absolutely love writing triggers for Silverlight 3.&#160; As UX developers we often faced with the challenge of finding ways to fit a ton of information on a single user input screen.&#160; On occasion, some of that information may only be relevant to display if users have made certain choices on the interface: checking a box, selecting an item in a combobox or listbox.&#160; In this post I will include two custom TargetedTriggerAction’s which allow a developer to easily tie a UIElement’s visibility to an action made on another control.</p>
<h2>VisibilityIsChecked</h2>
<p>This first trigger I very simple.&#160; I wanted the ability to tie a checkbox to the visibility of another UIElement.&#160; Since a checkbox derives from ToggleButton we can get creative and write a single trigger that will work with either a CheckBox, RadioButton or ToggleButton.&#160; Here is how I did it.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
</pre></td><td class="code"><pre class="c-sharp" style="font-family:monospace;">using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Interactivity;
&nbsp;
namespace VisibilityTriggers
{
    public class VisibilityIsChecked : TargetedTriggerAction&lt;frameworkelement&gt;
    {
        public static readonly DependencyProperty VisibleWhenCheckedProperty =
            DependencyProperty.Register(&amp;quot;VisibleWhenChecked&amp;quot;, typeof(bool), 
            typeof(VisibilityIsChecked), new PropertyMetadata(true));
        public bool VisibleWhenChecked
        {
            get
            {
                return (bool)GetValue(VisibleWhenCheckedProperty);
            }
            set
            {
                SetValue(VisibleWhenCheckedProperty, value);
            }
        }
&nbsp;
        protected override void OnAttached()
        {
            base.OnAttached();
            FrameworkElement element = this.AssociatedObject as FrameworkElement;
            if (element != null) element.Loaded += TargetLoaded;
        }
&nbsp;
        void TargetLoaded(object sender, RoutedEventArgs e)
        {
            ToggleButton tb = this.AssociatedObject as ToggleButton;
            SetVisibility(tb);
        }
        protected override void Invoke(object parameter)
        {
            RoutedEventArgs args = parameter as RoutedEventArgs;
&nbsp;
            if (args != null)
            {
                ToggleButton tb = args.OriginalSource as ToggleButton;
                SetVisibility(tb);
            }
        }
&nbsp;
        private void SetVisibility(ToggleButton tb)
        {
            if (tb != null)
            {
                Target.Visibility = ((bool)tb.IsChecked == VisibleWhenChecked) ? 
                Visibility.Visible : Visibility.Collapsed;
            }
        }
    }
}</pre></td></tr></table></div>

<p>To implement this trigger, we simply add an EventTrigger to a checkbox and set the TargetName to the control I want to visualize. Since there are times that we want IsChecked to either show or hide the element I have included a DependencyProperty called VisibileWhenChecked that can alter this behavior.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="c-sharp" style="font-family:monospace;">&lt;checkbox content=&quot;Show?&quot; margin=&quot;5&quot;&gt;
    &lt;i:interaction.triggers&gt;
        &lt;i:eventtrigger eventname=&quot;Click&quot;&gt;
            &lt;triggers:visibilityischecked targetname=&quot;rectangle&quot; /&gt;
        &lt;/i:eventtrigger&gt;
    &lt;/i:interaction.triggers&gt;
&lt;/checkbox&gt;
&lt;rectangle margin=&quot;10&quot; x:name=&quot;rectangle&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;Yellow&quot; visibility=&quot;Collapsed&quot; /&gt;</pre></td></tr></table></div>

<h2>VisibilitySelectedItem</h2>
<p>The second TargetedTriggerAction I created achieves a similar result, but instead of targeting a checkbox or radio button, it targets a ComboBox or ListBox. In this trigger I will flip a UIElements visibility based on a specific value being returned from a selection in the the ListBox. Here is how I implemented the trigger.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
</pre></td><td class="code"><pre class="c-sharp" style="font-family:monospace;">using System.Collections;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Interactivity;
&nbsp;
namespace VisibilityTriggers
{
    public class VisibilitySelectedItem : TargetedTriggerAction&lt;frameworkelement&gt;
    {
        public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register(&amp;quot;Value&amp;quot;, typeof(object), typeof(VisibilitySelectedItem), null);
&nbsp;
        public object Value
        {
            get
            {
                return (object)GetValue(ValueProperty);
            }
            set
            {
                SetValue(ValueProperty, value);
            }
        }
&nbsp;
        public static readonly DependencyProperty MatchMemberPathProperty =
            DependencyProperty.Register(&amp;quot;MatchMemberPath&amp;quot;, typeof(string), typeof(VisibilitySelectedItem), new PropertyMetadata(&amp;quot;Content&amp;quot;));
&nbsp;
        public string MatchMemberPath
        {
            get
            {
                return (string)GetValue(MatchMemberPathProperty);
            }
            set
            {
                SetValue(MatchMemberPathProperty, value);
            }
        }
&nbsp;
        protected override void OnAttached()
        {
            base.OnAttached();
            FrameworkElement element = this.AssociatedObject as FrameworkElement;
            if (element != null) element.Loaded += TargetLoaded;
        }
&nbsp;
        void TargetLoaded(object sender, RoutedEventArgs e)
        {
            FrameworkElement element = this.AssociatedObject as FrameworkElement;
            Selector cb = this.Target as Selector;
            if (cb != null)
            {
                int index = cb.SelectedIndex &amp;gt; -1 ? cb.SelectedIndex : 0;
                object item = (cb.Items.Count &amp;gt; 0) ? cb.Items[index] as object : null;
&nbsp;
                if (item != null)
                {
                    System.Reflection.PropertyInfo pi = item.GetType().GetProperty(MatchMemberPath);
                    var value = (pi != null) ? pi.GetValue(item, null) as object : item;
                    bool match = Equals(value, Value);
                    if (element != null) element.Visibility = match ? Visibility.Visible : Visibility.Collapsed;
                }
            }
        }
        protected override void Invoke(object parameter)
        {
            FrameworkElement element = this.AssociatedObject as FrameworkElement;
            SelectionChangedEventArgs args = parameter as SelectionChangedEventArgs;
&nbsp;
            if (args != null)
            {
                IList list = args.AddedItems as IList;
                if (list != null)
                {
                    foreach (object item in list)
                    {
                        System.Reflection.PropertyInfo pi = item.GetType().GetProperty(MatchMemberPath);
                        var value = (pi != null) ? pi.GetValue(item, null) as object : item;
&nbsp;
                        bool match = Equals(value, Value);
                        if (element != null) element.Visibility = match ? Visibility.Visible : Visibility.Collapsed;
                    }
                }
            }
        }
    }
}</pre></td></tr></table></div>

<p>To implement this TargetedTriggerAction you will place the custom EventTrigger on the item you want to visualize and target the SelectionChanged event on the ListBox (or ComboBox). Since we only want to visualize when a specific value is returned, we will also specifiy a &quot;Value&quot; and which property of our ListBox&#8217;s ItemSource we are targeting (MatchMemeberPath). The following is one way in which we can implement the trigger.&#160;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="c-sharp" style="font-family:monospace;">&lt;listbox x:name=&quot;myComboBox2&quot; width=&quot;100&quot; itemssource=&quot;{Binding Path=Items}&quot; displaymemberpath=&quot;Description&quot; /&gt;
&lt;rectangle margin=&quot;10&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;Silver&quot; visibility=&quot;Collapsed&quot;&gt;
    &lt;i:interaction.triggers&gt;
        &lt;i:eventtrigger eventname=&quot;SelectionChanged&quot; sourcename=&quot;myComboBox2&quot;&gt;
            &lt;triggers:visibilityselecteditem targetname=&quot;myComboBox2&quot; value=&quot;I1&quot; matchmemberpath=&quot;Code&quot; /&gt;
        &lt;/i:eventtrigger&gt;
    &lt;/i:interaction.triggers&gt;
&lt;/rectangle&gt;
&lt;ellipse margin=&quot;10&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;SaddleBrown&quot; visibility=&quot;Collapsed&quot;&gt;
    &lt;i:interaction.triggers&gt;
        &lt;i:eventtrigger eventname=&quot;SelectionChanged&quot; sourcename=&quot;myComboBox2&quot;&gt;
            &lt;triggers:visibilityselecteditem targetname=&quot;myComboBox2&quot; value=&quot;I2&quot; matchmemberpath=&quot;Code&quot; /&gt;
        &lt;/i:eventtrigger&gt;
    &lt;/i:interaction.triggers&gt;
&lt;/ellipse&gt;</pre></td></tr></table></div>

<p><br style="clear: both" /><iframe height="300" src="/wp-content/uploads/2009/08/VisibilityTriggers/" width="500"></iframe><br />
<br style="clear: both" /><br />
Code: <a onclick="javascript:pageTracker._trackPageview(&#39;/code/VisibilityTriggers.zip&#39;); " href="/wp-content/uploads/2009/08/VisibilityTriggers/VisibilityTriggers.zip">VisibilityTriggers.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://joel.neubeck.net/2009/08/control-visibility-with-triggers/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Silverlight 3 Flip TargetedTriggerAction</title>
		<link>http://joel.neubeck.net/2009/08/silverlight-3-flip-targetedtriggeraction/</link>
		<comments>http://joel.neubeck.net/2009/08/silverlight-3-flip-targetedtriggeraction/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 22:36:41 +0000</pubDate>
		<dc:creator>joel</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[3D Flip]]></category>
		<category><![CDATA[Silverlight 3]]></category>
		<category><![CDATA[TargetedTriggerAction]]></category>

		<guid isPermaLink="false">http://joel.neubeck.net/?p=421</guid>
		<description><![CDATA[Last week I created a Trigger Action which flipped a panel. It was intended to be invoked from clicking on the panel directly. Earlier today I was asked if you could invoke this trigger from multiple places. The answer is no, but it is very easily to rewrite this trigger to achieve this behavior. In [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I created a Trigger Action which flipped a panel.  It was intended to be invoked from clicking on the panel directly.  Earlier today I was asked if you could invoke this trigger from multiple places.  The answer is no, but it is very easily to rewrite this trigger to achieve this behavior.  In this blog post I am going to create a TargetedTriggerAction which allows me to add the trigger to a button or multiple UIElement and &#8220;Target&#8221; a panel to be flipped.  What is really cool about this approach is that each button can contain the logic used to flip the panel (Storyboard direction, duration, etc).</p>
<p> The following is the code I used to create my Flip TargetedTriggerAction.</p>

<div class="wp_syntax"><div class="code"><pre class="c-sharp" style="font-family:monospace;">using System.ComponentModel;
using System.Windows;
using System.Windows.Interactivity;
using System.Windows.Media;
using System.Windows.Media.Animation;
&nbsp;
namespace FlipTargetedTrigger
{
    public enum RotationDirection
    {
        LeftToRight,
        RightToLeft,
        TopToBottom,
        BottomToTop
    }
&nbsp;
    public class Flip : TargetedTriggerAction&lt;FrameworkElement&gt;
    {
        public static readonly DependencyProperty FrontElementNameProperty =
            DependencyProperty.Register(&quot;FrontElementName&quot;, typeof(string),
                                        typeof(Flip), new PropertyMetadata(null));
&nbsp;
        [Category(&quot;Flip Properties&quot;)]
        public string FrontElementName
        {
            get
            {
                return (string)GetValue(FrontElementNameProperty);
            }
            set
            {
                SetValue(FrontElementNameProperty, value);
            }
        }
&nbsp;
        public static readonly DependencyProperty BackElementNameProperty =
            DependencyProperty.Register(&quot;BackElementName&quot;, typeof(string),
                                        typeof(Flip), new PropertyMetadata(null));
&nbsp;
        [Category(&quot;Flip Properties&quot;)]
        public string BackElementName
        {
            get
            {
                return (string)GetValue(BackElementNameProperty);
            }
            set
            {
                SetValue(BackElementNameProperty, value);
            }
        }
&nbsp;
        public static readonly DependencyProperty DurationProperty =
            DependencyProperty.Register(&quot;Duration&quot;, typeof(Duration),
                                        typeof(Flip), new PropertyMetadata(null));
&nbsp;
        [Category(&quot;Animation Properties&quot;)]
        public Duration Duration
        {
            get
            {
                return (Duration)GetValue(DurationProperty);
            }
            set
            {
                SetValue(DurationProperty, value);
            }
        }
&nbsp;
        public static readonly DependencyProperty RotationProperty =
            DependencyProperty.Register(&quot;Rotation&quot;, typeof(RotationDirection),
                                        typeof(Flip), new PropertyMetadata(RotationDirection.LeftToRight));
&nbsp;
        [Category(&quot;Animation Properties&quot;)]
        public RotationDirection Rotation
        {
            get
            {
                return (RotationDirection)GetValue(RotationProperty);
            }
            set
            {
                SetValue(RotationProperty, value);
            }
        }
&nbsp;
        public static readonly DependencyProperty FrontStoryboardProperty =
            DependencyProperty.Register(&quot;FrontStoryboard&quot;, typeof(Storyboard), typeof(Flip), null);
&nbsp;
        public Storyboard FrontStoryBoard
        {
            get
            {
                return (Storyboard)GetValue(FrontStoryboardProperty);
            }
        }
        public static readonly DependencyProperty BackStoryboardProperty =
            DependencyProperty.Register(&quot;BackStoryboard&quot;, typeof(Storyboard), typeof(Flip), null);
&nbsp;
        public Storyboard BackStoryboard
        {
            get
            {
                return (Storyboard)GetValue(BackStoryboardProperty);
            }
        }
&nbsp;
        private bool _forward = true;
&nbsp;
        protected override void OnAttached()
        {
            base.OnAttached();
            FrameworkElement element = this.AssociatedObject as FrameworkElement;
            if (element != null) element.Loaded += TargetLoaded;
        }
&nbsp;
        void TargetLoaded(object sender, RoutedEventArgs e)
        {
            PlaneProjection pp = Target.Projection as PlaneProjection;
            if (Target.Projection == null)
            {
                pp = new PlaneProjection { CenterOfRotationY = .51 };
&nbsp;
                Target.RenderTransformOrigin = new Point(.5, .5);
                Target.Projection = pp;
            }
&nbsp;
            Storyboard sbF = new Storyboard();
            Storyboard sbB = new Storyboard();
&nbsp;
            UIElement f = null;
            UIElement b = null;
&nbsp;
            f = Target.FindName(FrontElementName) as UIElement;
            if (f != null)
            {
                PlaneProjection ppFront = new PlaneProjection { CenterOfRotationY = .51 };
                f.Projection = ppFront;
                f.RenderTransformOrigin = new Point(.5, .5);
            }
            b = Target.FindName(BackElementName) as UIElement;
            if (b != null)
            {
                PlaneProjection ppBack = new PlaneProjection { CenterOfRotationY = .51, RotationY = 180.0 };
                b.Projection = ppBack;
                b.RenderTransformOrigin = new Point(.5, .5);
                b.Opacity = 0.0;
            }
&nbsp;
&nbsp;
            double to = 0.0;
            double from = 180.0;
            string property = &quot;RotationY&quot;;
&nbsp;
            switch (Rotation)
            {
                case RotationDirection.RightToLeft:
                    to = 180.0;
                    from = 0.0;
                    break;
                case RotationDirection.TopToBottom:
                    property = &quot;RotationX&quot;;
                    break;
                case RotationDirection.BottomToTop:
                    to = 0.0;
                    from = 180.0;
                    property = &quot;RotationX&quot;;
                    break;
            }
&nbsp;
            sbF.Duration = Duration;
            sbB.Duration = Duration;
&nbsp;
            sbF.Children.Add(CreateDoubleAnimation(pp, property, from, to, true));
            sbB.Children.Add(CreateDoubleAnimation(pp, property, to, from, true));
&nbsp;
            sbF.Children.Add(CreateDoubleAnimation(f, &quot;Opacity&quot;, 1.0, 0.0, false));
            sbB.Children.Add(CreateDoubleAnimation(f, &quot;Opacity&quot;, 0.0, 1.0, false));
&nbsp;
            sbF.Children.Add(CreateDoubleAnimation(b, &quot;Opacity&quot;, 0.0, 1.0, false));
            sbB.Children.Add(CreateDoubleAnimation(b, &quot;Opacity&quot;, 1.0, 0.0, false));
&nbsp;
            SetValue(FrontStoryboardProperty, sbF);
            SetValue(BackStoryboardProperty, sbB);
&nbsp;
&nbsp;
        }
&nbsp;
        protected override void Invoke(object parameter)
        {
            Storyboard sbF = GetValue(FrontStoryboardProperty) as Storyboard;
            Storyboard sbB = GetValue(BackStoryboardProperty) as Storyboard;
&nbsp;
            if (_forward)
            {
                sbF.Begin();
                _forward = false;
            }
            else
            {
                sbB.Begin();
                _forward = true;
            }
        }
&nbsp;
        private static DoubleAnimation CreateDoubleAnimation(DependencyObject element, string property, double from,
                                                             double to, bool addEasing)
        {
            DoubleAnimation da = new DoubleAnimation();
            da.To = to;
            da.From = from;
            if (addEasing)
                da.EasingFunction = new PowerEase() { EasingMode = EasingMode.EaseOut, Power = 3 };
&nbsp;
            Storyboard.SetTargetProperty(da, new PropertyPath(property));
            Storyboard.SetTarget(da, element);
            return da;
        }
    }
}</pre></div></div>

<p>For the most part the code is very simmiler to the other trigger.  When you inherate from TargetTriggerAction you gain access to a new property called &#8220;Target&#8221; this will contain a reference to the UIELement I plan on flipping.  Instead of adding my PlainProjection to the AssociatedObject I instead add it to the target.  I made a few other changes like storing my Storyboards as dependency properties which allow me to reuse the same animiation each time I lick the button.  These DependencyProperites get stored in the AssociatedObject and not the Target.  This allows each item being clicked to have a unique animation.  Below is how I implement the TargetTriggerAction.</p>

<div class="wp_syntax"><div class="code"><pre class="c-sharp" style="font-family:monospace;">&lt;StackPanel Orientation=&quot;Vertical&quot;&gt;
    &lt;Grid Margin=&quot;10&quot; x:Name=&quot;flipMe&quot;&gt;
        &lt;StackPanel x:Name=&quot;back1&quot; Height=&quot;200&quot; Width=&quot;200&quot; HorizontalAlignment=&quot;Center&quot; 
                    VerticalAlignment=&quot;Center&quot;&gt;
            &lt;Rectangle Fill=&quot;Green&quot; Height=&quot;200&quot; Width=&quot;200&quot; StrokeThickness=&quot;1&quot; Stroke=&quot;Black&quot; /&gt;
        &lt;/StackPanel&gt;
        &lt;Rectangle x:Name=&quot;front1&quot; Fill=&quot;Gold&quot; Height=&quot;200&quot; Width=&quot;200&quot; 
                   HorizontalAlignment=&quot;Center&quot; VerticalAlignment=&quot;Center&quot;/&gt;
    &lt;/Grid&gt;
    &lt;Button Content=&quot;Flip RightToLeft&quot; Width=&quot;100&quot;&gt;
        &lt;i:Interaction.Triggers&gt;
            &lt;i:EventTrigger EventName=&quot;Click&quot;&gt;
                &lt;targeted:Flip FrontElementName=&quot;front1&quot; BackElementName=&quot;back1&quot; 
                               TargetName=&quot;flipMe&quot; Duration=&quot;00:00:1&quot; Rotation=&quot;RightToLeft&quot;/&gt;
            &lt;/i:EventTrigger&gt;
        &lt;/i:Interaction.Triggers&gt;
    &lt;/Button&gt;
    &lt;Button Content=&quot;Flip TopToBtoom&quot; Width=&quot;100&quot;&gt;
        &lt;i:Interaction.Triggers&gt;
            &lt;i:EventTrigger EventName=&quot;Click&quot;&gt;
                &lt;targeted:Flip FrontElementName=&quot;front1&quot; BackElementName=&quot;back1&quot; 
                               TargetName=&quot;flipMe&quot; Duration=&quot;00:00:1&quot; Rotation=&quot;TopToBottom&quot;/&gt;
            &lt;/i:EventTrigger&gt;
        &lt;/i:Interaction.Triggers&gt;
    &lt;/Button&gt;
&lt;/StackPanel&gt;</pre></div></div>

<p><br style="clear:both"/><br />
<iframe src="/wp-content/uploads/2009/08/FlipTargetedTrigger/" width="500" height="300"></iframe><br />
Code: <a onclick="javascript: pageTracker._trackPageview('/code/FlipTargetedTrigger.zip'); " href="/wp-content/uploads/2009/08/FlipTargetedTrigger/FlipTargetedTrigger.zip">FlipTargetedTrigger.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://joel.neubeck.net/2009/08/silverlight-3-flip-targetedtriggeraction/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

