<?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>Windows &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/windows/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Wed, 26 Jun 2024 15:44:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Enhanced Emoji Support: A Look into Graphics and String.Character Improvements</title>
		<link>https://blog.xojo.com/2024/06/26/enhanced-emoji-support-a-look-into-graphics-and-string-character-improvements/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Wed, 26 Jun 2024 15:00:00 +0000</pubDate>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[20242r2]]></category>
		<category><![CDATA[Emoji]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Unicode]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=13136</guid>

					<description><![CDATA[Now in Xojo 2024r2, we've enhanced emojis with vivid colors!]]></description>
										<content:encoded><![CDATA[
<p>In the past, people used a two-character symbol : ) to add a smiley to their messages. Nowadays, we have full-color emojis for that purpose, so it&#8217;s time for Xojo to catch up unless we want to be seen as old <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f995.png" alt="🦕" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<h2 class="wp-block-heading">Enhanced Emoji Rendering</h2>



<p>While Xojo&#8217;s Graphics class supported rendering emojis on Windows and Linux, their appearance was less appealing.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"><div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="454" height="377" data-id="13137" src="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r1.png" alt="" class="wp-image-13137" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r1.png 454w, https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r1-300x249.png 300w" sizes="(max-width: 454px) 100vw, 454px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="303" height="263" data-id="13143" src="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r1Linux-1.png" alt="" class="wp-image-13143" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r1Linux-1.png 303w, https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r1Linux-1-300x260.png 300w" sizes="(max-width: 303px) 100vw, 303px" /></figure>
</div></figure>



<p>Now in Xojo 2024r2, we&#8217;ve enhanced emojis with vivid colors!</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex"><div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="454" height="377" data-id="13138" src="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r2.png" alt="" class="wp-image-13138" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r2.png 454w, https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r2-300x249.png 300w" sizes="(max-width: 454px) 100vw, 454px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="303" height="263" data-id="13142" src="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r2Linux-1.png" alt="" class="wp-image-13142" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r2Linux-1.png 303w, https://blog.xojo.com/wp-content/uploads/2024/06/Emoji2024r2Linux-1-300x260.png 300w" sizes="auto, (max-width: 303px) 100vw, 303px" /></figure>
</div></figure>



<p>You’ll notice that other parts of the Xojo framework that utilize the Graphics class, such as the ListBox, have also benefited from this update.</p>



<h2 class="wp-block-heading">Understanding Emojis at a Deeper Level</h2>



<p>Understanding how emojis are encoded is crucial for grasping how Xojo&#8217;s String type works and how we interpret them. Any text or emoji displayed on the screen can be considered a Unicode sequence or a series of Unicode sequences. At a deeper level, a single Unicode sequence can be constructed from multiple Unicode code points (i.e., bytes of data). For clarity, we&#8217;ll describe one character<strong> </strong>(whether simple text or an emoji) as being composed of Unicode sequence(s).</p>



<p>To demonstrate, let&#8217;s try to understand the woman <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f469.png" alt="👩" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<div class="wp-block-media-text is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="913" height="628" src="https://blog.xojo.com/wp-content/uploads/2024/06/Woman1.png" alt="" class="wp-image-13149 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/Woman1.png 913w, https://blog.xojo.com/wp-content/uploads/2024/06/Woman1-300x206.png 300w, https://blog.xojo.com/wp-content/uploads/2024/06/Woman1-768x528.png 768w" sizes="auto, (max-width: 913px) 100vw, 913px" /></figure><div class="wp-block-media-text__content">
<p>This particular woman is not very complex, it is made up of one single Unicode sequence (with corresponding code points).  Our String type can easily handle this one Unicode sequence and reports correctly that the Length of the String is 1 (even though the entire emoji is made up of 4 bytes of code points).</p>
</div></div>



<p>Now let&#8217;s take a look at a more complicated woman <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f469-200d-1f9b0.png" alt="👩‍🦰" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<div class="wp-block-media-text is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="916" height="631" src="https://blog.xojo.com/wp-content/uploads/2024/06/Woman2-1.png" alt="" class="wp-image-13148 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2024/06/Woman2-1.png 916w, https://blog.xojo.com/wp-content/uploads/2024/06/Woman2-1-300x207.png 300w, https://blog.xojo.com/wp-content/uploads/2024/06/Woman2-1-768x529.png 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure><div class="wp-block-media-text__content">
<p>The only difference visually is that this woman has fiery red hair.  This subtle change in appearance means that to construct this emoji requires not 1, not 2, but 3 distinct Unicode sequences (with a grand total of 11 bytes of code points).</p>
</div></div>



<p>Note that the reported length of the String is 3 Unicode sequences, even though we visually see only one character. This distinction is very important in understanding how String functions work. Xojo&#8217;s String functions inherently deal with Unicode sequences, not individual characters. When you do need to work with complex emojis like these, you will want to utilize our String.Characters API which effectively manages this complexity.</p>



<h2 class="wp-block-heading">An Optimized String.Characters</h2>



<p>Given the prevalence of emojis in everyday text and messages, properly handling them within Xojo&#8217;s String type is crucial. While we initially introduced this feature as String.Characters, it functioned as an iterator until Xojo 2024r2. Now, String.Characters returns a String array, which can still be iterated, ensuring existing code continues to work as before. Additionally, this update offers the added advantage of significantly improved speed, especially on Windows and Linux. Along with this update, we introduced String.CharacterCount, which is useful when you need to know the number of characters in a string without storing them all in an array.</p>



<p>To further understand emojis and their corresponding Unicode sequences, check out this <a href="https://www.unicode.org/emoji/charts/full-emoji-list.html">Full Emoji List</a>.</p>



<p><em><em><em>William Yu grew up in Canada learning to program BASIC on a Vic-20. He is Xojo’s resident Windows and Linux engineer, among his many other skills. Some may say he has joined the dark side here in the USA, but he will always be a Canadian at heart.</em></em></em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TabPanel has Finally Joined the Dark Side</title>
		<link>https://blog.xojo.com/2024/03/26/tabpanel-has-finally-joined-the-dark-side/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Tue, 26 Mar 2024 15:26:49 +0000</pubDate>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[2024r1]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[DesktopXAMLContainer]]></category>
		<category><![CDATA[TabPanel]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=12752</guid>

					<description><![CDATA[Xojo's TabPanel on Windows has fought hard to stay on the light side by making the dark mode transition annoyingly difficult, but at long last it has given up the fight and has embraced the dark side.]]></description>
										<content:encoded><![CDATA[
<p>Xojo&#8217;s TabPanel on Windows has fought hard to stay on the light side by making the dark mode transition annoyingly difficult, but at long last it has given up the fight and has embraced the dark side.</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" autoplay controls loop src="https://blog.xojo.com/wp-content/uploads/2024/03/LightToDarkRepeat.mp4"></video></figure>



<p>Supporting dark mode with Win32 controls is never an easy exercise, but if you&#8217;ve been following along with our work to modernize our Windows framework with XAML, then you may have already updated your apps with the XAML TabView control that natively supports dark mode.</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" autoplay controls loop src="https://blog.xojo.com/wp-content/uploads/2024/03/XAMLTabPanel.mp4"></video></figure>



<p>Simply plug this bit of XAML into our DesktopXAMLContainer Content property and you&#8217;ve got yourself a modern looking TabPanel that already supported dark mode even before we did.</p>



<pre class="wp-block-code"><code>&lt;winui:TabView&gt;
	&lt;winui:TabView.TabItems&gt;
		&lt;winui:TabViewItem Header="Tab 1"&gt;
			&lt;StackPanel&gt;
				&lt;TextBlock Text="This is Tab 1" Margin="5"/&gt;
				&lt;Button Content="Button 1" Margin="5"/&gt;
				&lt;CheckBox Content="Checkbox 1" IsChecked="True" Margin="5"/&gt;
			&lt;/StackPanel&gt;
		&lt;/winui:TabViewItem&gt;
		&lt;winui:TabViewItem Header="Tab 2"&gt;
			&lt;StackPanel&gt;
				&lt;TextBlock Text="This is Tab 2" Margin="5"/&gt;
				&lt;TextBox Text="Enter text here" Margin="5"/&gt;
				&lt;ComboBox Margin="5"&gt;
					&lt;ComboBoxItem Content="Item 1"/&gt;
					&lt;ComboBoxItem Content="Item 2"/&gt;
					&lt;ComboBoxItem Content="Item 3"/&gt;
				&lt;/ComboBox&gt;
			&lt;/StackPanel&gt;
		&lt;/winui:TabViewItem&gt;
	&lt;/winui:TabView.TabItems&gt;
&lt;/winui:TabView&gt;</code></pre>



<p>While people debate on which mode (light or dark) they prefer to work in, you can ultimately control whether you want to support dark mode or not in your app by toggling the &#8220;Supports Dark Mode&#8221; build setting.  For an example on how to dynamically switch between dark and light mode in your app using XAML, see the XAML ButtonStyling example project and the RequestedTheme property.</p>



<p><em><em><em>William Yu grew up in Canada learning to program BASIC on a Vic-20. He is Xojo’s resident Windows and Linux engineer, among his many other skills. Some may say he has joined the dark side here in the USA, but he will always be a Canadian at heart.</em></em></em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		<enclosure url="https://blog.xojo.com/wp-content/uploads/2024/03/LightToDarkRepeat.mp4" length="1852724" type="video/mp4" />
<enclosure url="https://blog.xojo.com/wp-content/uploads/2024/03/XAMLTabPanel.mp4" length="801534" type="video/mp4" />

			</item>
		<item>
		<title>Doing More With DesktopXAMLContainer</title>
		<link>https://blog.xojo.com/2023/08/09/doing-more-with-desktopxamlcontainer/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Wed, 09 Aug 2023 13:30:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Rapid Application Development]]></category>
		<category><![CDATA[WinUI]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11776</guid>

					<description><![CDATA[With the introduction of DesktopXAMLContainer you can slowly modernize your Windows apps or supplement your existing user interface with additional WinUI controls. In this tutorial I'll demonstrate how you can do more with XAML.]]></description>
										<content:encoded><![CDATA[
<p>With the introduction of DesktopXAMLContainer you can slowly modernize your Windows apps or supplement your existing user interface with additional WinUI controls. If you are new to XAML, read my earlier post <a href="https://blog.xojo.com/2023/08/09/introducing-desktopxamlcontainer/">Introducing DesktopXAMLContainer</a> to begin. In this tutorial I&#8217;ll demonstrate how you can do more with XAML.</p>



<h3 class="wp-block-heading"><strong>Doing More With Layouts</strong></h3>



<p>While you can certainly add a single WinUI control in a DesktopXAMLContainer, you can also aggregate controls on the container to improve things. XAML makes it possible to customize the layout of your controls using mark-up instead of laying out your controls (one by one) on your window and adjusting the position by hand. Take for example a set of buttons that you want to layout vertically on your window. While you can certainly position three individual buttons on your layout, you could also accomplish this using one DesktopXAMLContainer with the StackPanel layout.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:36% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="454" height="347" src="https://blog.xojo.com/wp-content/uploads/2023/07/VerticalButtons-1.png" alt="" class="wp-image-11780 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/VerticalButtons-1.png 454w, https://blog.xojo.com/wp-content/uploads/2023/07/VerticalButtons-1-300x229.png 300w" sizes="auto, (max-width: 454px) 100vw, 454px" /></figure><div class="wp-block-media-text__content">
<p></p>



<pre id="Xojo" class="wp-block-code"><code><code>&lt;StackPanel Orientation="Vertical"&gt;
  &lt;Button Content="Button 1"/&gt;
  &lt;Button Content="Button 2"
           Margin="0,10,0,0"/&gt;
  &lt;Button Content="Button 3"
           Margin="0,10,0,0"/&gt;
&lt;/StackPanel&gt;</code></code></pre>
</div></div>



<p>Without any dragging or dropping, you can re-configure this layout to be horizontal instead.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:36% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="454" height="347" src="https://blog.xojo.com/wp-content/uploads/2023/07/HorizontalButtons.png" alt="" class="wp-image-11783 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/HorizontalButtons.png 454w, https://blog.xojo.com/wp-content/uploads/2023/07/HorizontalButtons-300x229.png 300w" sizes="auto, (max-width: 454px) 100vw, 454px" /></figure><div class="wp-block-media-text__content">
<p></p>



<pre id="Xojo" class="wp-block-code"><code><code>&lt;StackPanel Orientation="Horizontal"&gt;
  &lt;Button Content="Button 1"/&gt;
  &lt;Button Content="Button 2"
           Margin="10,0,0,0"/&gt;
  &lt;Button Content="Button 3"
           Margin="10,0,0,0"/&gt;
&lt;/StackPanel&gt;</code></code></pre>
</div></div>



<h3 class="wp-block-heading">Handling Events</h3>



<p>In the case of a single WinUI button in a DesktopXAMLContainer, handling events is a simple check in EventTriggered for the &#8220;Click&#8221; eventName. With multiple buttons in a DesktopXAMLContainer, you will want to properly Name them to determine which button was clicked.</p>



<pre id="Xojo" class="wp-block-code"><code><code>&lt;StackPanel Orientation="Vertical"&gt;
  &lt;Button Name="Button1" Content="Button 1"/&gt;
  &lt;Button Name="Button2" Content="Button 2"
           Margin="0,10,0,0"/&gt;
  &lt;Button Name="Button3" Content="Button 3"
           Margin="0,10,0,0"/&gt;
&lt;/StackPanel&gt;</code></code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="493" src="https://blog.xojo.com/wp-content/uploads/2023/07/DebugEventTriggered-1024x493.png" alt="" class="wp-image-11787" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/DebugEventTriggered-1024x493.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/07/DebugEventTriggered-300x144.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/DebugEventTriggered-768x370.png 768w, https://blog.xojo.com/wp-content/uploads/2023/07/DebugEventTriggered.png 1219w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>You can inspect the parameters Dictionary to see what other Keys are available for a particular control and event. All controls will have at least the three basic keys: the fully qualified XAML <strong>Class</strong> name, the <strong>Name</strong> of the control, and the additional <strong>Tag</strong> property. Some controls will have additional Keys populated in the Dictionary, for example the XAML CheckBox control will fire a ValueChanged event with an IsChecked Key available in the parameters Dictionary. The specific names for these Keys can be found in the XAML Control Chooser Window.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.xojo.com/wp-content/uploads/2023/07/IsCheckedKey.png" alt="" class="wp-image-11789" width="627" height="461" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/IsCheckedKey.png 979w, https://blog.xojo.com/wp-content/uploads/2023/07/IsCheckedKey-300x221.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/IsCheckedKey-768x566.png 768w" sizes="auto, (max-width: 627px) 100vw, 627px" /></figure>
</div>


<h3 class="wp-block-heading">Doing More With Code Behind</h3>



<p>There will be instances where you may want to setup your control dynamically in code. The available properties/methods that a particular XAML control supports in the XAML Control Chooser window are documented. These properties and methods can be accessed using the DesktopXAMLContainer&#8217;s Value and Invoke methods. Let&#8217;s take the simple example of a Button. While you could set this all up using just XAML code, there may be times that you want to only change the caption of the Button in code. To do this you can use the Value method:</p>



<pre id="Xojo" class="wp-block-code"><code><code>XAMLContainer1.Value("Content") = "My new caption"</code></code></pre>



<p>Equivalently, you could also set this up using only XAML code:</p>



<pre id="Xojoo" class="wp-block-code"><code><code>XAMLContainer1.Content = "&lt;Button Content='My new caption'/&gt;"</code></code></pre>



<p>If you have multiple Buttons in your DesktopXAMLContainer (like in our StackPanel example above), you can reference the control using a fully qualified name space:</p>



<pre id="Xojo" class="wp-block-code"><code><code>XAMLContainer1.Value("Button2.Content") = "My new caption"</code></code></pre>



<p>Conversely, if you wanted to know what the caption of Button3 is, you can use the Value to get it too:</p>



<pre id="Xojo" class="wp-block-code"><code><code>myCaption = XAMLContainer1.Value("Button3.Content")</code></code></pre>



<h3 class="wp-block-heading">Some Properties/Methods Support Embedded XAML Code</h3>



<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile"><div class="wp-block-media-text__content">
<p></p>



<p>If you take a look at the Button Content property, we&#8217;ve documented it with a note about it supporting XAML code. This means you can insert XAML code instead of just a basic string. So if you wanted to embed a ProgressRing inside a Button you could add that using the Content property.</p>
</div><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="979" height="722" src="https://blog.xojo.com/wp-content/uploads/2023/07/ContentSupportsXAML.png" alt="" class="wp-image-11791 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/ContentSupportsXAML.png 979w, https://blog.xojo.com/wp-content/uploads/2023/07/ContentSupportsXAML-300x221.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/ContentSupportsXAML-768x566.png 768w" sizes="auto, (max-width: 979px) 100vw, 979px" /></figure></div>



<pre id="Xojo" class="wp-block-code"><code><code>XAMLContainer1.Value("Content") = "&lt;ProgressRing /&gt;"</code></code></pre>



<p>This would be the equivalent XAML code:</p>



<pre id="Xojo" class="wp-block-code"><code><code>&lt;Button&gt;
  &lt;ProgressRing /&gt;
&lt;/Button&gt;</code></code></pre>



<h3 class="wp-block-heading">What is this winui namespace?</h3>



<p>You may notice that some controls, added via the XAML Control Chooser window, use the winui namespace when you inspect the Content. Those particular controls are using the more modern UI look and feel. See <a href="https://learn.microsoft.com/en-us/uwp/api/microsoft.ui.xaml.controls" target="_blank" rel="noreferrer noopener">https://learn.microsoft.com/en-us/uwp/api/microsoft.ui.xaml.controls</a><br>some controls offer the older style equivalent, see <a href="https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls" target="_blank" rel="noreferrer noopener">https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls</a><br>One such control is the ProgressRing. If you prefix this with winui, you&#8217;ll get the updated look, while the previous iteration can be seen without the winui prefix.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="150" height="108" src="https://blog.xojo.com/wp-content/uploads/2023/07/progressring_indeterminate.gif" alt="" class="wp-image-11793 size-full"/></figure><div class="wp-block-media-text__content">
<p></p>



<pre id="Xojo" class="wp-block-code"><code><code>&lt;winui:ProgressRing /&gt;</code></code></pre>
</div></div>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="440" height="440" src="https://blog.xojo.com/wp-content/uploads/2023/07/fluidprogressring.gif" alt="" class="wp-image-11795 size-full"/></figure><div class="wp-block-media-text__content">
<p></p>



<pre id="Xojo" class="wp-block-code"><code><code>&lt;ProgressRing /&gt;</code></code></pre>
</div></div>



<div style="height:46px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Custom Binding</h3>



<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile" style="grid-template-columns:auto 68%"><div class="wp-block-media-text__content">
<p>Xojo supports a new mark-up syntax called {XojoBinding} specifically to help with re-usability of XAML controls. This currently only binds at the layout/IDE layer, but can be useful for re-usability purposes. As in this example you can customize the look of a Button by changing some properties in the inspector.</p>
</div><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="1024" height="675" src="https://blog.xojo.com/wp-content/uploads/2023/07/XAMLSubclasses-1024x675.png" alt="" class="wp-image-11797 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/XAMLSubclasses-1024x675.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/07/XAMLSubclasses-300x198.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/XAMLSubclasses-768x506.png 768w, https://blog.xojo.com/wp-content/uploads/2023/07/XAMLSubclasses-1536x1013.png 1536w, https://blog.xojo.com/wp-content/uploads/2023/07/XAMLSubclasses.png 1888w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>



<p>To set this up you will need to subclass a DesktopXAMLContainer and add the properties you want exposed in the inspector.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="668" src="https://blog.xojo.com/wp-content/uploads/2023/07/ExposeInspectorProps-1024x668.png" alt="" class="wp-image-11801" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/ExposeInspectorProps-1024x668.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/07/ExposeInspectorProps-300x196.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/ExposeInspectorProps-768x501.png 768w, https://blog.xojo.com/wp-content/uploads/2023/07/ExposeInspectorProps.png 1091w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>You will then need to add the necessary {XojoBinding} calls in the Content of your XAML:</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="785" height="497" src="https://blog.xojo.com/wp-content/uploads/2023/07/EditSourceForBinding-1.png" alt="" class="wp-image-11804 size-full" srcset="https://blog.xojo.com/wp-content/uploads/2023/07/EditSourceForBinding-1.png 785w, https://blog.xojo.com/wp-content/uploads/2023/07/EditSourceForBinding-1-300x190.png 300w, https://blog.xojo.com/wp-content/uploads/2023/07/EditSourceForBinding-1-768x486.png 768w" sizes="auto, (max-width: 785px) 100vw, 785px" /></figure><div class="wp-block-media-text__content">
<p></p>



<p>The syntax for binding to a XAML property is written as:</p>



<p> <code>{XojoBinding [name of class property]}</code></p>



<p>And in this case it&#8217;s binding the Caption property that we just added and exposed via the Inspector Behavior, to the Content of the XAML Button.</p>
</div></div>



<p>This means a change to the Caption property in the Inspector will now update the XAML code to reflect this change and update the layout accordingly. For doing more with the DesktopXAMLContainer, make sure to check out the Example Projects included in the Examples folder of the <a href="https://xojo.com/download/">Xojo Download</a>, the <a href="https://documentation.xojo.com/api/user_interface/desktop/desktopxamlcontainer.html">Xojo Documentation</a>.</p>



<p><em><em><em>William Yu grew up in Canada learning to program BASIC on a Vic-20. He is Xojo’s resident Windows and Linux engineer, among his many other skills. Some may say he has joined the dark side here in the USA, but he will always be a Canadian at heart.</em></em></em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
