<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[WPF מטפל ארוע עבור Template]]></title><description><![CDATA[<p dir="auto">עד כמה שהבנתי, ואני מקווה שאני טועה, שכל הTemplate זה לא משהו שקיים בזכרון כמו משתנה מוצהר עם NEW, אלא זה משהו ריק כמו איזה טיפוס כל שהו, ולכן כדי לחבר לזה פקודה צריך לעשות שמיניות באויר עם ICommand, למשל אם אני רוצה להכניס לחצן לתוך פקד של בורר תאריכים כדי שהפקד יעבור ל'היום':</p>
<p dir="auto">[code2=vb.net:2enqd55o]Imports System.Windows.Input<br />
Imports System.Windows.Controls</p>
<p dir="auto">Public NotInheritable Class CalendarCommands<br />
Private Sub New()<br />
End Sub<br />
Private Shared ReadOnly _selectTodayCommand As New SelectTodayCommand()</p>
<pre><code>Public Shared ReadOnly Property SelectToday() As ICommand
    Get
        Return _selectTodayCommand
    End Get
End Property

Private NotInheritable Class SelectTodayCommand
    Implements ICommand

    Public Custom Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
        AddHandler(ByVal value As EventHandler)
            'CommandManager.AddCanExecuteHandler(value)
        End AddHandler

        RemoveHandler(ByVal value As EventHandler)
            'CommandManager.RequerySuggested(value)
        End RemoveHandler
        RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
        End RaiseEvent

    End Event

    Public Function CanExecute(parameter As Object) _
        As Boolean Implements ICommand.CanExecute
        Return TypeOf parameter Is Calendar
    End Function

    Public Sub Execute(parameter As Object) Implements ICommand.Execute
        Dim calendar = TryCast(parameter, Calendar)
        If calendar IsNot Nothing Then
            Dim today = DateTime.Today
            calendar.SelectedDate = today
            calendar.DisplayDate = today
            'מה להוסיף כאן כדי שבורר התאריכים יסגר????
        End If
    End Sub

End Class
</code></pre>
<p dir="auto">End Class[/code2:2enqd55o]</p>
<pre><code>&lt;Style x:Key="DefaultCalendar" TargetType="Calendar" &gt;
                           &lt;Setter Property="Template"&gt;
                &lt;Setter.Value&gt;
                    &lt;ControlTemplate TargetType="{x:Type Calendar}"&gt;
                        &lt;StackPanel HorizontalAlignment="Center" Name="PART_Root"&gt;
                            &lt;CalendarItem Background="{TemplateBinding Control.Background}" 
                                          BorderBrush="{TemplateBinding Control.BorderBrush}" 
                                          BorderThickness="{TemplateBinding Control.BorderThickness}" 
                                          Name="PART_CalendarItem"  
                                          Style="{TemplateBinding Calendar.CalendarItemStyle}" /&gt;
                            &lt;Button Content="Today" Command="{x:Static Commands:CalendarCommands.SelectToday}" 
                                    CommandParameter="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}}"/&gt;
                        &lt;/StackPanel&gt;
                    &lt;/ControlTemplate&gt;
                &lt;/Setter.Value&gt;
            &lt;/Setter&gt;
        &lt;/Style&gt;
</code></pre>
<p dir="auto">כמה זה יכל להיות פשוט אם הלחצן שבתוך ההTemplate היה משהו קיים שאפשר להתיחס אליו בקוד ולכתוב לו פונקציה מטפלת.<br />
אולי מישהו יחכים אותנו בכל הנושא הזה?</p>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב30/10/2013 18:37 (+02:00)</em></p>
]]></description><link>https://tchumim.com/topic/189/wpf-מטפל-ארוע-עבור-template</link><generator>RSS for Node</generator><lastBuildDate>Sun, 08 Mar 2026 00:13:52 GMT</lastBuildDate><atom:link href="https://tchumim.com/topic/189.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jan 2018 10:34:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WPF מטפל ארוע עבור Template on Mon, 29 Jan 2018 10:34:04 GMT]]></title><description><![CDATA[<p dir="auto">אני מאוד מתנצל על אי ההבנה שקרתה פה  <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=9d71ebe86e6" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title=":(" alt="😞" /></p>
<p dir="auto">בכל מקרה עזרת לי מאוד!</p>
<ol>
<li>אפשר לוותר על כל הקוד VB שהבאתי למעלה בשביל הקומנט ולהסתפק בכמה שורות של קוד שיציגו ויסגרו את הלוח הקופץ.</li>
<li>הבנתי שאכן טמפלט וסטול הם 'רק' תבניות של על פיהן יווצרו דברים קיימים.</li>
<li>יישר כח גדול !  <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=9d71ebe86e6" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></li>
</ol>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב12/11/2013 19:35 (+02:00)</em></p>
]]></description><link>https://tchumim.com/post/1017</link><guid isPermaLink="true">https://tchumim.com/post/1017</guid><dc:creator><![CDATA[רחמים]]></dc:creator><pubDate>Mon, 29 Jan 2018 10:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to WPF מטפל ארוע עבור Template on Mon, 29 Jan 2018 10:34:04 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%D7%A8%D7%97%D7%9E%D7%99%D7%9D">@<bdi>רחמים</bdi></a></p>
<blockquote>
<p dir="auto">עדיין בלחיצה על הכפתור בורר התאריכים לא נסגר.</p>
</blockquote>
<p dir="auto">אתה נורא מרגיז!<br />
בשאלתך היו שאלות בצורה לא מסודרת.<br />
עד שאני מבין ועונה לך על שאלה אחת, אתה "פורך" את התשובה בזה ששאלה אחרת שנרמזה קלות (הערה בקוד!) בשאלתך לא נענתה.<br />
מה הכוונה "עדיין"? חשבת שתוך שעתיים בשמש זה יסתדר?!<br />
סליחה על החריפות.</p>
<p dir="auto">הנה קוד מלא לסגירת הבורר:</p>
<pre><code>Dim Calendar As Calendar = CType(sender, Button).TemplatedParent

Dim today = DateTime.Today
Calendar.SelectedDate = today
Calendar.DisplayDate = today

Dim popup = TryCast(Calendar.Parent, Primitives.Popup)
If Not IsNothing(popup) Then popup.IsOpen = False
</code></pre>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%D7%A8%D7%97%D7%9E%D7%99%D7%9D">@<bdi>רחמים</bdi></a></p>
<blockquote>
<p dir="auto">דבר נוסף אני בעצם רוצה שאני אשתמש בסטול הזה של בורר תאריכים בדטה-גריד שיש בו עמודה של תאריך וכמו באקסס שכאשר שדה של תאריך בפוקוס יש למשתמש אפשרות ללחוץ על סמל של לוח שנה ואז הלוח שנה נפתח הוא לוחץ על 'היום' ולוח השנה נסגר, דבר כל כך פשוט לכאורא וכל כך קשה לעשות אותו בדוט-נט....</p>
</blockquote>
<p dir="auto">למה זה דבר נוסף?</p>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב12/11/2013 18:51 (+02:00)</em></p>
]]></description><link>https://tchumim.com/post/1016</link><guid isPermaLink="true">https://tchumim.com/post/1016</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Mon, 29 Jan 2018 10:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to WPF מטפל ארוע עבור Template on Mon, 29 Jan 2018 10:34:04 GMT]]></title><description><![CDATA[<p dir="auto">עדיין בלחיצה על הכפתור בורר התאריכים לא נסגר.</p>
<p dir="auto">דבר נוסף אני בעצם רוצה שאני אשתמש בסטול הזה של בורר תאריכים בדטה-גריד שיש בו עמודה של תאריך וכמו באקסס שכאשר שדה של תאריך בפוקוס יש למשתמש אפשרות ללחוץ על סמל של לוח שנה ואז הלוח שנה נפתח הוא לוחץ על 'היום' ולוח השנה נסגר, דבר כל כך פשוט לכאורא וכל כך קשה לעשות אותו בדוט-נט....</p>
<p dir="auto">משהו בצירוף זה:</p>
<pre><code>    &lt;DataGridTemplateColumn Header="Pick a Date"&gt;
                    &lt;DataGridTemplateColumn.CellTemplate&gt;
                        &lt;DataTemplate&gt;
                            &lt;TextBlock Text="{Binding myDate}" /&gt;
                        &lt;/DataTemplate&gt;
                    &lt;/DataGridTemplateColumn.CellTemplate&gt;
                    &lt;DataGridTemplateColumn.CellEditingTemplate&gt;
                        &lt;DataTemplate&gt;
                            &lt;!--שהבורר יהיה עם לחצן 'היום'--&gt;
                            &lt;DatePicker SelectedDate="{Binding myDate}" /&gt;
                        &lt;/DataTemplate&gt;
                    &lt;/DataGridTemplateColumn.CellEditingTemplate&gt;
                &lt;/DataGridTemplateColumn&gt;
</code></pre>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב12/11/2013 15:27 (+02:00)</em></p>
]]></description><link>https://tchumim.com/post/1015</link><guid isPermaLink="true">https://tchumim.com/post/1015</guid><dc:creator><![CDATA[רחמים]]></dc:creator><pubDate>Mon, 29 Jan 2018 10:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to WPF מטפל ארוע עבור Template on Mon, 29 Jan 2018 10:34:03 GMT]]></title><description><![CDATA[<p dir="auto">לא, אתמול לא הבנתי לגמרי מה שרצית לעשות.<br />
כעת שהבנתי, אז המילים "מה להוסיף כאן כדי שבורר התאריכים יסגר" שכתבת שייכים לDataPicker ולא לCalendar.</p>
<p dir="auto">אפשר לעשות סתם אירוע לכל אלמנט בטמפלט ממש כמו כל אירוע של כפתור:<br />
קוד VB</p>
<pre><code>    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim Calendar As Calendar = CType(sender, Button).TemplatedParent

        Dim today = DateTime.Today
        Calendar.SelectedDate = today
        Calendar.DisplayDate = today
    End Sub
</code></pre>
<p dir="auto">קוד XAML הכל כמו שהראית רק תחליף את הכפתור:</p>
<pre><code>&lt;Button Content="Today" Click="Button_Click" /&gt;
</code></pre>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב12/11/2013 15:01 (+02:00)</em></p>
]]></description><link>https://tchumim.com/post/1014</link><guid isPermaLink="true">https://tchumim.com/post/1014</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Mon, 29 Jan 2018 10:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to WPF מטפל ארוע עבור Template on Mon, 29 Jan 2018 10:34:03 GMT]]></title><description><![CDATA[<p dir="auto">כעת קלטתי מה רצית לעשות.<br />
בל"נ מחר אראה לך איך אפשר בקלות רבה.</p>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב11/11/2013 17:24 (+02:00)</em></p>
]]></description><link>https://tchumim.com/post/1013</link><guid isPermaLink="true">https://tchumim.com/post/1013</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Mon, 29 Jan 2018 10:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to WPF מטפל ארוע עבור Template on Mon, 29 Jan 2018 10:34:03 GMT]]></title><description><![CDATA[<p dir="auto">בגלל הבעיות באתר קשה לי לקרוא את הקוד.<br />
טמפלט זה "הוראות יצירה" לתוכן כל שהוא, וכל פעם בו צריכים אותו יוצרים לפיו את מכלול "ההוראות".<br />
אפשר להצמיד אירוע פשוט לטמפלט. ממש כמו לכל אלמנט רגיל.</p>
<p dir="auto">ICommand שימושי רק:<br />
א. הפעלת פונקציות שמגיעות עם האובייקט אותו מטמפלטים. לדוגמא פקד שקורא מסמכי PDF, אז כשעושים לו טמפלט מחדש ורוצים שכפתור יפתח PDF ולא אנו כתבנו את השגרה לזה, אז אנו בודקים בהוראות היצרן של הפקד איזה קומנד זה ופשוט מחברים אותו לכפתור ע"י קומנד ביינדינג.<br />
ב. מתי שאנו עצמנו רוצים לכתוב "ברמה", מה שנקרא MVVM, שאין ללוגיקה (הקוד המעשי) שום תלות בתצוגה (האובייקטים והקוד החזותיים). אז נניח כתבנו לוגיקה לפתיחת קובץ, ואנחנו רוצים לפנות אליה מהתצוגה, אז מתאים להשתמש בקומנד (אני לא חתום על הנוחות הזאת).</p>
<p dir="auto"><em>פורסם במקור בפורום CODE613 ב11/11/2013 17:20 (+02:00)</em></p>
]]></description><link>https://tchumim.com/post/1012</link><guid isPermaLink="true">https://tchumim.com/post/1012</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Mon, 29 Jan 2018 10:34:03 GMT</pubDate></item></channel></rss>