Catch Events from Within TemplatesHere the pretty much simplyfied code:<br><br> <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p></p> <div style="text-align:left">&lt;Page x:Name=&quot;myPageObj&quot;&gt;<br> <div style="margin-left:40px">&lt;Page.Resources&gt;<br></div> <div style="margin-left:80px">&lt;DataTemplate DataType=&quot;{x:Type local:ImageMenuData}&quot;&gt;<br></div> <div style="margin-left:120px">&lt;Border&gt;<br></div> <div style="margin-left:160px">&lt;Border.Triggers&gt;<br></div> <div style="margin-left:200px">&lt;EventTrigger SourceName=&quot;myPageObj&quot; RoutedEvent=&quot;MyPage.NextDocEvent&quot;&gt;<br> <div style="margin-left:40px">&lt;BeginStoryboard Storyboard=&quot;{StaticResource 3dFlipAnimation}&quot;/&gt;<br></div>&lt;/EventTrigger&gt;</div></div> <div style="margin-left:160px">&lt;Border.Triggers&gt;<br></div> <div style="margin-left:120px">&lt;/Border&gt;<br></div> <div style="margin-left:80px">&lt;/DataTemplate&gt;<br></div> <div style="margin-left:40px">&lt;/Page.Resources&gt;<br><br>...<br></div> <div style="margin-left:80px"><br></div>&lt;/Page&gt;<br> <div style="text-align:left"><br></div></div></div><br><br>Now I want to throw the NextDocEvent from within c# code.<br>The definition of the Event:<br><br> <div style="text-align:left"> <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p>public static readonly RoutedEvent NextDocEvent = EventManager.RegisterRoutedEvent( &quot;NextDoc&quot;, RoutingStrategy.Tunnel, typeof( RoutedEventHandler ), typeof( MyPage ) );<br><br>public event RoutedEventHandler NextDoc<br>{<br></p> <div style="margin-left:40px">add { AddHandler( NextDocEvent, value ); }<br></div> <div style="margin-left:40px">remove { RemoveHandler( NextDocEvent, value ); }<br></div> <p>}<br><br>void RaiseNextDocEvent()<br>{<br></p> <div style="margin-left:40px">RoutedEventArgs newEventArgs = new RoutedEventArgs( MyPage.NextDocEvent );<br>RaiseEvent(newEventArgs);<br></div> <p>}</p></div></div><br></div><br>this approach seems not to work because I get this Error:<br><br> <div style="text-align:left"> <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p>'MyPage.NextDocEvent' value cannot be assigned to property 'RoutedEvent' of object 'System.Windows.EventTrigger'. Value cannot be null.<br>Parameter name: value  Error at object 'System.Windows.EventTrigger' in markup file<br></p></div></div><br></div><br>© 2009 Microsoft Corporation. All rights reserved.Thu, 06 Aug 2009 12:46:23 Zb1deb6fd-2ac5-479e-b9e6-cd4686f2837ahttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#b1deb6fd-2ac5-479e-b9e6-cd4686f2837ahttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#b1deb6fd-2ac5-479e-b9e6-cd4686f2837aSven Hechthttp://social.msdn.microsoft.com/Profile/en-US/?user=Sven%20HechtCatch Events from Within TemplatesHere the pretty much simplyfied code:<br><br> <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p></p> <div style="text-align:left">&lt;Page x:Name=&quot;myPageObj&quot;&gt;<br> <div style="margin-left:40px">&lt;Page.Resources&gt;<br></div> <div style="margin-left:80px">&lt;DataTemplate DataType=&quot;{x:Type local:ImageMenuData}&quot;&gt;<br></div> <div style="margin-left:120px">&lt;Border&gt;<br></div> <div style="margin-left:160px">&lt;Border.Triggers&gt;<br></div> <div style="margin-left:200px">&lt;EventTrigger SourceName=&quot;myPageObj&quot; RoutedEvent=&quot;MyPage.NextDocEvent&quot;&gt;<br> <div style="margin-left:40px">&lt;BeginStoryboard Storyboard=&quot;{StaticResource 3dFlipAnimation}&quot;/&gt;<br></div>&lt;/EventTrigger&gt;</div></div> <div style="margin-left:160px">&lt;Border.Triggers&gt;<br></div> <div style="margin-left:120px">&lt;/Border&gt;<br></div> <div style="margin-left:80px">&lt;/DataTemplate&gt;<br></div> <div style="margin-left:40px">&lt;/Page.Resources&gt;<br><br>...<br></div> <div style="margin-left:80px"><br></div>&lt;/Page&gt;<br> <div style="text-align:left"><br></div></div></div><br><br>Now I want to throw the NextDocEvent from within c# code.<br>The definition of the Event:<br><br> <div style="text-align:left"> <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p>public static readonly RoutedEvent NextDocEvent = EventManager.RegisterRoutedEvent( &quot;NextDoc&quot;, RoutingStrategy.Tunnel, typeof( RoutedEventHandler ), typeof( MyPage ) );<br><br>public event RoutedEventHandler NextDoc<br>{<br></p> <div style="margin-left:40px">add { AddHandler( NextDocEvent, value ); }<br></div> <div style="margin-left:40px">remove { RemoveHandler( NextDocEvent, value ); }<br></div> <p>}<br><br>void RaiseNextDocEvent()<br>{<br></p> <div style="margin-left:40px">RoutedEventArgs newEventArgs = new RoutedEventArgs( MyPage.NextDocEvent );<br>RaiseEvent(newEventArgs);<br></div> <p>}</p></div></div><br></div><br>this approach seems not to work because I get this Error:<br><br> <div style="text-align:left"> <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p>'MyPage.NextDocEvent' value cannot be assigned to property 'RoutedEvent' of object 'System.Windows.EventTrigger'. Value cannot be null.<br>Parameter name: value  Error at object 'System.Windows.EventTrigger' in markup file<br></p></div></div><br></div><br>Mon, 13 Aug 2007 16:20:46 Z2007-08-13T16:20:46Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#b1015f60-cd1b-4741-9322-a201f92cd223http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#b1015f60-cd1b-4741-9322-a201f92cd223Yi-Lun Luohttp://social.msdn.microsoft.com/Profile/en-US/?user=Yi-Lun%20LuoCatch Events from Within TemplatesHello, you should use RoutedEvent=&quot;local:MyPage.NextDoc&quot;, not NextDocEvent. Just like you normally use RoutedEvent=&quot;Button.Click&quot;, not ClickEvent. <p align=left><font face=Arial size=2></font> </p>Wed, 15 Aug 2007 06:55:12 Z2007-08-15T06:55:12Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#0d6c074d-ffb7-4d7f-8141-d992ccee014fhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#0d6c074d-ffb7-4d7f-8141-d992ccee014fSven Hechthttp://social.msdn.microsoft.com/Profile/en-US/?user=Sven%20HechtCatch Events from Within Templatesstupid me! Of course. <br>Now it compiles but still the event is not catched.<br>if I call the Raise-Method the EventTrigger doesnt get the tunneled event it should shouldn't it?<br>Wed, 15 Aug 2007 16:36:45 Z2007-08-15T16:36:45Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#57762aea-63b1-4676-b5ef-af6d5df7c2behttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#57762aea-63b1-4676-b5ef-af6d5df7c2beYi-Lun Luohttp://social.msdn.microsoft.com/Profile/en-US/?user=Yi-Lun%20LuoCatch Events from Within Templates<p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3>This works fine for me:</font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3>In the Window’s code behind, create a routed event:</font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">static</span> <span style="color:blue">readonly</span> <span style="color:#2b91af">RoutedEvent</span> TestEvent = <span style="color:#2b91af">EventManager</span>.RegisterRoutedEvent(<span style="color:#a31515">&quot;Test&quot;</span>, <span style="color:#2b91af">RoutingStrategy</span>.Tunnel, <span style="color:blue">typeof</span>(<span style="color:#2b91af">RoutedEventHandler</span>), <span style="color:blue">typeof</span>(<span style="color:#2b91af">Window1</span>));</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"> </span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">event</span> <span style="color:#2b91af">RoutedEventHandler</span> Test</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">            </span><span style="color:blue">add</span> { AddHandler(TestEvent, <span style="color:blue">value</span>); }</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">            </span><span style="color:blue">remove</span> { RemoveHandler(TestEvent, <span style="color:blue">value</span>); }</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span>}</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"> </span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span><span style="color:blue">private</span> <span style="color:blue">void</span> RaiseTestEvent()</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">            </span><span style="color:#2b91af">RoutedEventArgs</span> newEventArgs = <span style="color:blue">new</span> <span style="color:#2b91af">RoutedEventArgs</span>(<span style="color:#2b91af">Window1</span>.TestEvent);</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">            </span>RaiseEvent(newEventArgs);</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span>}</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3> </font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3>Raise this event when clicking a Button (are you missing this step?):</font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span><span style="color:blue">private</span> <span style="color:blue">void</span> Button1_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">            </span>RaiseTestEvent();</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;font-family:Consolas"><span style="">        </span>}</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3> </font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3>Use an EventTrigger to handle this event:</font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas"><span style="">                </span></span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">&lt;</span><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas">EventTrigger</span><span lang=EN-US style="font-size:9pt;color:red;font-family:Consolas"> RoutedEvent</span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">=&quot;local:Window1.Test&quot;&gt;</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas"><span style="">                    </span></span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">&lt;</span><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas">BeginStoryboard</span><span lang=EN-US style="font-size:9pt;color:red;font-family:Consolas"> Storyboard</span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">=&quot;{</span><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas">StaticResource</span><span lang=EN-US style="font-size:9pt;color:red;font-family:Consolas"> sb</span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">}&quot;/&gt;</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;text-align:left" align=left><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas"><span style="">                </span></span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">&lt;/</span><span lang=EN-US style="font-size:9pt;color:#a31515;font-family:Consolas">EventTrigger</span><span lang=EN-US style="font-size:9pt;color:blue;font-family:Consolas">&gt;</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3> </font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3>The animation plays successfully.</font></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span lang=EN-US><font face=Calibri size=3> </font></span></p> <p align=left><font face=Arial size=2></font> </p>Thu, 16 Aug 2007 03:31:03 Z2007-08-16T03:31:03Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#4cc35b16-1734-4181-b1c8-6ce62e1d4e2dhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#4cc35b16-1734-4181-b1c8-6ce62e1d4e2dSven Hechthttp://social.msdn.microsoft.com/Profile/en-US/?user=Sven%20HechtCatch Events from Within TemplatesCould it be that I cant catch the event because my EventTrigger is in a Template?<br>Thu, 16 Aug 2007 07:12:21 Z2007-08-16T07:12:21Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#3d9822a1-edfa-4e09-91f5-706c05838a81http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#3d9822a1-edfa-4e09-91f5-706c05838a81jturpinhttp://social.msdn.microsoft.com/Profile/en-US/?user=jturpinCatch Events from Within Templates<p align=left><font face=Arial size=2></font> </p> <p>I have a very similar <a title="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2015647&amp;SiteID=1" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2015647&amp;SiteID=1">situation</a>. My post <a title="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2015647&amp;SiteID=1" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2015647&amp;SiteID=1">here</a> explains this. Have you figured out what your issue is? I have been struggling with this for a while now - need to find some alternate solutions soon if I can't figure out what is going on.</p> <p align=left> </p> <p align=left>I have double-checked and tripple checked for syntatic/spelling errors which the compiler might not catch and have found nothing. For some reason my DataTemplate is not catching the event even though I have verified that the ListBoxItem it is applied to can from code.</p> <p align=left> </p> <p align=left>Any suggestions out there on how to debug this?</p>Thu, 16 Aug 2007 21:24:05 Z2007-08-16T21:24:05Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#a847c7fe-6f94-4fec-b84f-d4c87b8349e8http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#a847c7fe-6f94-4fec-b84f-d4c87b8349e8Rob Relyeahttp://social.msdn.microsoft.com/Profile/en-US/?user=Rob%20RelyeaCatch Events from Within Templates<p align=left>DataTemplate is a NameScope (implements INameScope), so the SourceName in the EventTrigger is looking for myPageObj in the DataTemlate, not in the Page.</p> <p> </p> <p align=left>Thanks, Rob</p> <p><span style="color:#1f497d"><font face=Verdana color="#000000"><font size=2>Rob Relyea | Program Manager, WPF &amp; Xaml Language Team<br></font><a title="http://robrelyea.com/" href="http://robrelyea.com/"><font size=2>robrelyea.com</font></a><font size=2> | </font><a title="http://robrelyea.com/blog" href="http://robrelyea.com/blog"><font size=2>/blog</font></a><font size=2> | </font><a title="http://robrelyea.com/wpf" href="http://robrelyea.com/wpf"><font size=2>/wpf</font></a><font size=2> | </font><a title="http://robrelyea.com/xaml" href="http://robrelyea.com/xaml"><font size=2>/xaml</font></a></font></span></p>Tue, 21 Aug 2007 16:52:24 Z2007-08-21T16:52:24Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#d9ea8cbd-a972-4365-9ae3-4a5f845a8cddhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b1deb6fd-2ac5-479e-b9e6-cd4686f2837a#d9ea8cbd-a972-4365-9ae3-4a5f845a8cddSven Hechthttp://social.msdn.microsoft.com/Profile/en-US/?user=Sven%20HechtCatch Events from Within TemplatesThanks Rob that was a slightly more helpful piece of information.<br>So i am in another scope. <br>Is there a Chance to Trigger that EvenTrigger from within other scopes? <br>Any solution is ok even a hacky one. I need to catch that Event in the templatescope else I have to work around and remove almost all my templates and work them into my definitions.<br>That would be good night DRY.<br>Wed, 22 Aug 2007 08:39:49 Z2007-08-22T08:39:49Z