%3CLINGO-SUB%20id%3D%22lingo-sub-1064964%22%20slang%3D%22en-US%22%3EUno%20Platform%20%E3%81%8C%E5%87%84%E3%81%8F%E9%9D%A2%E7%99%BD%E3%81%9D%E3%81%86%E3%81%AA%E3%81%AE%E3%81%A7%E7%B4%B9%E4%BB%8B%EF%BC%81%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1064964%22%20slang%3D%22en-US%22%3E%3CP%3EUno%20Platform%20%E3%82%92%E5%B0%91%E3%81%97%E8%A7%A6%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F%E6%84%9F%E3%81%98%E9%9D%A2%E7%99%BD%E3%81%9D%E3%81%86%E3%81%A0%E3%81%A8%E6%84%9F%E3%81%98%E3%81%9F%E9%83%A8%E5%88%86%E3%82%92%E7%B4%B9%E4%BB%8B%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%E5%85%AC%E5%BC%8F%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AF%E3%81%93%E3%81%A1%E3%82%89%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fplatform.uno%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fplatform.uno%2F%3C%2FA%3E%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId--1439426406%22%20id%3D%22toc-hId--1439426379%22%3E%E7%B0%A1%E5%8D%98%E3%81%AA%E8%AA%AC%E6%98%8E%3C%2FH2%3E%0A%3CP%3E%E8%A9%B3%E7%B4%B0%E3%81%AF%E5%85%AC%E5%BC%8F%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%20%3CA%20href%3D%22https%3A%2F%2Fplatform.uno%2Fdocs%2Farticles%2Fintro.html%22%20target%3D%22_self%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3EWhat%20is%20the%20Uno%20Platform%3F%3C%2FA%3E%20%E3%81%AB%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%9D%E3%81%A1%E3%82%89%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%8F%E3%81%A8%E3%81%97%E3%81%A6%E5%80%8B%E4%BA%BA%E7%9A%84%E3%81%AA%E8%A7%A3%E9%87%88%E3%81%A7%E3%81%AF%20UWP%20%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%97%E3%81%9F%E7%94%BB%E9%9D%A2%E3%81%8C%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20Android%20%E3%82%84%20iOS%20%E3%82%84%20Windows%20(%E5%BD%93%E7%84%B6%E3%81%A7%E3%81%99%E3%81%8C)%20%E3%82%84%20WebAssembly%20%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8F%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%97%E3%81%A6%E3%82%8B%E3%82%82%E3%81%AE%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EXamarin.Forms%20%E3%82%82%E5%90%8C%E3%81%98%E3%82%88%E3%81%86%E3%81%AB%20XAML%20%2B%20C%23%20%E3%81%AE%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A7%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%96%8B%E7%99%BA%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81Uno%20Platform%20%E3%81%A8%E6%AF%94%E3%81%B9%E3%81%A6%E4%B8%80%E7%95%AA%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%20ContentControl%20%E3%81%8C%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A0%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3EWPF%20%E3%81%A7%E7%99%BB%E5%A0%B4%E3%81%97%E3%81%9F%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fdotnet%2Fframework%2Fwpf%2Fcontrols%2Fwpf-content-model%22%20target%3D%22_self%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3E%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%A2%E3%83%87%E3%83%AB%3C%2FA%3E%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E6%9F%94%E8%BB%9F%E3%81%AA%E8%A6%8B%E3%81%9F%E7%9B%AE%E3%82%92%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%A7%E5%AE%9F%E7%8F%BE%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82Xamarin.Forms%20%E3%81%AF%20XAML%20%2B%20C%23%20%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%82%92%E3%80%81%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AB%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E3%81%93%E3%81%A8%E3%81%AF%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%81%9F%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E3%81%93%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AF%E6%8C%81%E3%81%A1%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E3%81%84%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7%E3%80%81%E4%BE%8B%E3%81%88%E3%81%B0%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%20XAML%20%E3%81%AF%E3%80%81Xamarin.Forms%20%E3%81%A7%E3%81%AF%E5%AE%9F%E7%8F%BE%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%3CBUTTON%20horizontalalignment%3D%22Center%22%20verticalalignment%3D%22Center%22%3E%0A%20%20%20%20%3CSTACKPANEL%20orientation%3D%22Horizontal%22%3E%0A%20%20%20%20%20%20%20%20%3CELLIPSE%20width%3D%2230%22%20height%3D%2230%22%20fill%3D%22Blue%22%3E%3C%2FELLIPSE%3E%0A%20%20%20%20%20%20%20%20%3CTEXTBLOCK%20text%3D%22Rich%20button!!%22%3E%3C%2FTEXTBLOCK%3E%0A%20%20%20%20%20%20%20%20%3CELLIPSE%20width%3D%2230%22%20height%3D%2230%22%20fill%3D%22Blue%22%3E%3C%2FELLIPSE%3E%0A%20%20%20%20%3C%2FSTACKPANEL%3E%0A%3C%2FBUTTON%3E%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%AE%E4%B8%AD%E3%81%AB%E9%9D%92%E3%81%84%E4%B8%B8%E3%81%A8%E3%80%81%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E4%B8%A6%E3%82%93%E3%81%A0%E7%8A%B6%E6%85%8B%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%EF%BC%88%E5%B7%A6%E3%81%8B%E3%82%89%20Android%E3%80%81UWP%E3%80%81WebAssembly%EF%BC%89%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Fgxcuf89792.i.lithium.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F161619iC7EB7C550B93F6BA%2Fimage-size%2Fmedium%3Fv%3D1.0%26amp%3Bpx%3D400%22%20alt%3D%22clipboard_image_0.png%22%20title%3D%22clipboard_image_0.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3EWPF%E3%80%81UWP%20%E3%81%A8%20XAML%20%E3%81%A7%E3%81%AE%E9%96%8B%E7%99%BA%E3%81%AB%E6%85%A3%E3%82%8C%E3%81%A6%E3%81%84%E3%81%9F%E7%A7%81%E3%81%AF%E3%80%81%E7%84%A1%E6%84%8F%E8%AD%98%E3%81%AE%E3%81%86%E3%81%A1%E3%81%AB%E3%81%93%E3%81%AE%E6%9F%94%E8%BB%9F%E6%80%A7%E3%82%92%E3%81%8C%E3%81%82%E3%82%8B%E3%81%AE%E3%81%8C%20XAML%20%E3%81%A7%E3%81%AE%E9%96%8B%E7%99%BA%E3%81%A0%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%A6%E3%81%9F%E3%81%AE%E3%81%A7%20Xamarin.Forms%20%E3%81%AB%E3%82%88%E3%82%8B%E9%96%8B%E7%99%BA%E3%81%AF%E8%8B%A5%E5%B9%B2%E4%B8%8D%E8%87%AA%E7%94%B1%E3%81%AB%E6%84%9F%E3%81%98%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%81%A9%E3%81%A3%E3%81%A1%E3%81%8C%E3%81%84%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%E3%81%AE%E3%81%AF%E7%84%A1%E3%81%84%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%A6%E3%81%84%E3%81%A6%E3%80%81Xamarin.Forms%20%E3%81%AF%E3%83%AC%E3%83%B3%E3%83%80%E3%83%A9%E3%83%BC%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AB%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%92%E5%AE%9F%E7%8F%BE%E3%81%97%E3%81%A6%E3%81%84%E3%81%A6%E3%80%81Uno%20%E3%81%AF%20UWP%20%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%82%E3%81%AE%E3%82%92%E5%90%84%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%A7%E5%8B%95%E3%81%8F%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F%E3%81%A8%E3%81%84%E3%81%86%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81%E3%81%AE%E9%81%95%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EWPF%E3%80%81UWP%20%E3%81%AE%E9%96%8B%E7%99%BA%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%81%8C%E3%81%82%E3%82%8B%E4%BA%BA%E3%81%AB%E3%81%A8%E3%81%A3%E3%81%A6%E3%81%AF%20Uno%20Platform%20%E3%81%AF%E3%80%81%E3%81%A8%E3%81%A6%E3%82%82%E3%81%A8%E3%81%A3%E3%81%A4%E3%81%8D%E3%82%84%E3%81%99%E3%81%84%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AB%E4%BB%95%E4%B8%8A%E3%81%8C%E3%81%A3%E3%81%A6%E3%82%8B%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId-1048086427%22%20id%3D%22toc-hId-1048086454%22%3E%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E6%A9%9F%E8%83%BD%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%3C%2FH2%3E%0A%3CP%3E%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E6%A9%9F%E8%83%BD%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%96%B9%E6%B3%95%E3%82%82%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82C%23%20%E3%81%A8%20XAML%20%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%A7%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CUL%3E%0A%3CLI%3EC%23%3A%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fplatform.uno%2Fdocs%2Farticles%2Fplatform-specific-csharp.html%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fplatform.uno%2Fdocs%2Farticles%2Fplatform-specific-csharp.html%3C%2FA%3E%3C%2FLI%3E%0A%3CLI%3EXAML%3A%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fplatform.uno%2Fdocs%2Farticles%2Fplatform-specific-xaml.html%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fplatform.uno%2Fdocs%2Farticles%2Fplatform-specific-xaml.html%3C%2FA%3E%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CP%3EC%23%20%E3%81%AE%E3%81%BB%E3%81%86%E3%81%AF%20%23if%20%E3%81%A7%E5%88%86%E5%B2%90%E3%81%97%E3%81%9F%E3%82%8A%20partial%20class%20%E3%82%92%E4%BD%BF%E3%81%86%E4%BE%8B%E3%81%8C%E7%B4%B9%E4%BB%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8C%20Shared%20%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E8%80%83%E3%81%88%E3%82%8B%E3%81%A8%E5%8D%98%E3%81%AB%E5%90%84%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%EF%BC%88iOS%2C%20Droid%2C%20UWP%2C%20Wasm%EF%BC%89%E3%81%AB%E5%90%8C%E3%81%98%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%82%92%E6%8C%81%E3%81%A3%E3%81%9F%E5%90%8C%E5%90%8D%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%80%81%E4%B8%AD%E8%BA%AB%E3%81%AF%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E5%AE%9F%E8%A3%85%E3%81%A8%E3%81%84%E3%81%86%E5%BD%A2%E3%81%A7%E5%AF%BE%E5%BF%9C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E4%BE%8B%E3%81%88%E3%81%B0%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AB%E4%BD%95%E3%81%8B%E3%81%97%E3%82%89%E3%81%82%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8%E3%82%92%E9%80%9A%E7%9F%A5%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AB%20Android%20%E3%81%A7%E3%81%AF%E3%83%88%E3%83%BC%E3%82%B9%E3%83%88%E3%80%81iOS%20%E3%81%A7%E3%81%AF%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%80%81UWP%20%E3%81%A7%E3%81%AF%E3%83%88%E3%83%BC%E3%82%B9%E3%83%88%E9%80%9A%E7%9F%A5%E3%80%81WebAssembly%20%E3%81%A7%E3%81%AF%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%81%A8%E3%81%84%E3%81%86%E5%BD%A2%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%90%84%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EAndroid%20%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%3Eusing%20Android.App%3B%0Ausing%20Android.Widget%3B%0A%0Anamespace%20HelloUno%0A%7B%0A%20%20%20%20public%20class%20Toast%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20public%20static%20void%20Show(string%20text)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Android.Widget.Toast.MakeText(Application.Context%2C%20text%2C%20ToastLength.Long).Show()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EiOS%20%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%3Eusing%20UIKit%3B%0A%0Anamespace%20HelloUno%0A%7B%0A%20%20%20%20public%20class%20Toast%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20public%20static%20void%20Show(string%20text)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20alert%20%3D%20UIAlertController.Create(%22Toast%22%2C%20text%2C%20UIAlertControllerStyle.Alert)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert.AddAction(UIAlertAction.Create(%22OK%22%2C%20UIAlertActionStyle.Default%2C%20_%20%3D%26gt%3B%20%7B%20%7D))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alert%2C%20true%2C%20null)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EUWP%20%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%3Eusing%20System.Linq%3B%0Ausing%20Windows.UI.Notifications%3B%0A%0Anamespace%20HelloUno%0A%7B%0A%20%20%20%20public%20class%20Toast%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20public%20static%20void%20Show(string%20text)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20n%20%3D%20ToastNotificationManager.CreateToastNotifier()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20content%20%3D%20ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20textNode%20%3D%20content.GetElementsByTagName(%22text%22).First()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20textNode.InnerText%20%3D%20text%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20n.Show(new%20ToastNotification(content))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EWebAssembly%20%E7%94%A8%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%3Eusing%20System%3B%0Ausing%20Windows.UI.Popups%3B%0A%0Anamespace%20HelloUno%0A%7B%0A%20%20%20%20public%20class%20Toast%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20public%20static%20async%20void%20Show(string%20text)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20await%20new%20MessageDialog(text).ShowAsync()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EiOS%20%E3%81%AF%E6%89%8B%E5%85%83%E3%81%AB%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81Android%20%E3%81%A8%20UWP%20%E3%81%A8%20WebAssembly%20%E3%81%A7%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Fgxcuf89792.i.lithium.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F161622iF073F71ABDE3B08C%2Fimage-size%2Fmedium%3Fv%3D1.0%26amp%3Bpx%3D400%22%20alt%3D%22clipboard_image_1.png%22%20title%3D%22clipboard_image_1.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Fgxcuf89792.i.lithium.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F161623i1FB7750E57FD4307%2Fimage-size%2Fmedium%3Fv%3D1.0%26amp%3Bpx%3D400%22%20alt%3D%22clipboard_image_2.png%22%20title%3D%22clipboard_image_2.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Fgxcuf89792.i.lithium.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F161624i7D9B8F1419726C2F%2Fimage-size%2Fmedium%3Fv%3D1.0%26amp%3Bpx%3D400%22%20alt%3D%22clipboard_image_3.png%22%20title%3D%22clipboard_image_3.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%E4%B8%80%E9%83%A8%E3%81%A0%E3%81%91%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E5%87%A6%E7%90%86%E3%81%AB%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%E3%82%B1%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%8B%E3%82%82%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%20partial%20method%20%E3%81%A7%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E9%83%A8%E5%88%86%E3%82%92%E5%88%87%E3%82%8A%E5%87%BA%E3%81%99%E3%81%8B%E3%80%81%E4%BB%8A%E5%9B%9E%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E5%AE%8C%E5%85%A8%E3%81%AB%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E5%87%A6%E7%90%86%E3%81%AF%E5%88%A5%E3%80%85%E3%81%AB%E4%BD%9C%E3%82%8B%E5%A0%B4%E5%90%88%E3%82%82%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E9%96%93%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%AB%E5%B7%AE%E7%95%B0%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%84%20Shared%20%E3%81%AB%20interface%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%A6%E3%80%81%E5%90%84%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%A8%E3%81%84%E3%81%86%E5%BD%A2%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EXAML%20%E3%81%A7%E3%81%AE%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88%E3%82%82%E4%B8%8A%E8%A8%98%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AB%E3%81%82%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%20XML%20%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%99%E3%81%A3%E3%81%8D%E3%82%8A%E3%81%A8%E6%9B%B8%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%E3%81%95%E3%82%89%E3%81%AB%E3%80%81xmlns%3Anative_android%3D%22using%3AAndroid.Widget%22%20%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E3%82%88%E3%81%86%E3%81%AA%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%A6%E3%80%81xmlns%3Aandroid%3D%22%3CA%20href%3D%22http%3A%2F%2Funo.ui%2Fandroid%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Funo.ui%2Fandroid%3C%2FA%3E%22%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9B%BA%E6%9C%89%E6%A9%9F%E8%83%BD%E3%82%92%E6%9B%B8%E3%81%8F%E6%A9%9F%E8%83%BD%E3%81%A8%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E3%81%A8%E3%80%81%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E6%98%8E%E7%A4%BA%E7%9A%84%E3%81%AB%E7%BD%AE%E3%81%8F%E3%81%93%E3%81%A8%E3%82%82%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%20XAML%20%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%3CPAGE%20class%3D%22HelloUno.MainPage%22%20xmlns%3D%22%26lt%3BA%20href%3D%22%3Ehttp%3A%2F%2Fschemas.microsoft.com%2Fwinfx%2F2006%2Fxaml%2Fpresentation%22%0A%20%20%20%20xmlns%3Ax%3D%22%3CA%20href%3D%22http%3A%2F%2Fschemas.microsoft.com%2Fwinfx%2F2006%2Fxaml%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Fschemas.microsoft.com%2Fwinfx%2F2006%2Fxaml%3C%2FA%3E%22%0A%20%20%20%20xmlns%3Alocal%3D%22using%3AHelloUno%22%0A%20%20%20%20xmlns%3Ad%3D%22%3CA%20href%3D%22http%3A%2F%2Fschemas.microsoft.com%2Fexpression%2Fblend%2F2008%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Fschemas.microsoft.com%2Fexpression%2Fblend%2F2008%3C%2FA%3E%22%0A%20%20%20%20xmlns%3Amc%3D%22%3CA%20href%3D%22http%3A%2F%2Fschemas.openxmlformats.org%2Fmarkup-compatibility%2F2006%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Fschemas.openxmlformats.org%2Fmarkup-compatibility%2F2006%3C%2FA%3E%22%0A%20%20%20%20xmlns%3Aandroid%3D%22%3CA%20href%3D%22http%3A%2F%2Funo.ui%2Fandroid%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Funo.ui%2Fandroid%3C%2FA%3E%22%0A%20%20%20%20xmlns%3Anative_android%3D%22using%3AAndroid.Widget%22%0A%20%20%20%20mc%3AIgnorable%3D%22d%20android%22%26gt%3B%0A%0A%20%20%20%20%3CGRID%20background%3D%22%7BThemeResource%20ApplicationPageBackgroundThemeBrush%7D%22%3E%0A%20%20%20%20%20%20%20%20%3CBUTTON%20horizontalalignment%3D%22Center%22%20verticalalignment%3D%22Center%22%20click%3D%22Button_Click%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CSTACKPANEL%20orientation%3D%22Horizontal%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CELLIPSE%20width%3D%2230%22%20height%3D%2230%22%20fill%3D%22Blue%22%3E%3C%2FELLIPSE%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CTEXTBLOCK%20text%3D%22Rich%20button!!%22%20verticalalignment%3D%22Center%22%20margin%3D%2210%22%3E%3C%2FTEXTBLOCK%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CBORDER%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CTEXTVIEW%20text%3D%22Android%20Native!!%22%3E%3C%2FTEXTVIEW%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FBORDER%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CELLIPSE%20width%3D%2230%22%20height%3D%2230%22%20fill%3D%22Blue%22%3E%3C%2FELLIPSE%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSTACKPANEL%3E%0A%20%20%20%20%20%20%20%20%3C%2FBUTTON%3E%0A%20%20%20%20%3C%2FGRID%3E%0A%3C%2FPAGE%3E%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%20Android%20%E5%81%B4%E3%81%AB%E3%81%A0%E3%81%91%E8%BF%BD%E5%8A%A0%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Fgxcuf89792.i.lithium.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F161627i8F81F0FC292690B1%2Fimage-size%2Fmedium%3Fv%3D1.0%26amp%3Bpx%3D400%22%20alt%3D%22clipboard_image_4.png%22%20title%3D%22clipboard_image_4.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId--759368036%22%20id%3D%22toc-hId--759368009%22%3EUno%20Platform%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA%3C%2FH2%3E%0A%3CP%3E%E4%BB%A5%E4%B8%8B%E3%81%AE%20Issue%20%E3%81%A7%20Uno%20Platform%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8C%E7%B4%B9%E4%BB%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%E8%88%88%E5%91%B3%E3%81%8C%E3%81%82%E3%81%A3%E3%81%9F%E3%82%89%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%81%A8%E3%81%84%E3%81%84%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Funoplatform%2Funo%2Fissues%2F18%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fgithub.com%2Funoplatform%2Funo%2Fissues%2F18%3C%2FA%3E%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId-1728144797%22%20id%3D%22toc-hId-1728144824%22%3E%E3%81%BE%E3%81%A8%E3%82%81%3C%2FH2%3E%0A%3CP%3EUno%20Platform%20%E3%81%AF%E3%80%81WPF%20%E3%82%84%20UWP%20%E3%82%92%E3%82%84%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E4%BA%BA%E3%81%8C%E3%80%81%E3%81%93%E3%82%8C%E6%AC%B2%E3%81%97%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%A8%E6%80%9D%E3%81%86%E3%82%88%E3%81%86%E3%81%AA%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%84%9A%E7%9B%B4%E3%81%AB%20UWP%20%E3%81%AE%20API%20%E3%82%92%E5%90%84%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AB%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%81%97%E3%81%A6%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%BF%E3%82%8B%E3%81%A8%E9%9D%A2%E7%99%BD%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%E5%80%8B%E4%BA%BA%E7%9A%84%E3%81%AA%E3%81%8A%E5%8B%A7%E3%82%81%E3%81%AF%20Uno.UI%20%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E4%BB%A5%E4%B8%8B%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Funoplatform%2Funo%2Ftree%2Fmaster%2Fsrc%2FUno.UI%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fgithub.com%2Funoplatform%2Funo%2Ftree%2Fmaster%2Fsrc%2FUno.UI%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%E4%BE%8B%E3%81%88%E3%81%B0%20ContentControl%20%E3%81%AE%20UpdateContentTemplateRoot%20%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E3%81%8B%E9%A0%91%E5%BC%B5%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E5%86%8D%E7%8F%BE%E3%81%97%E3%81%A6%E3%82%8B%E6%84%9F%E3%81%98%E3%81%8C%E3%81%86%E3%81%8B%E3%81%8C%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Funoplatform%2Funo%2Fblob%2Fmaster%2Fsrc%2FUno.UI%2FUI%2FXaml%2FControls%2FContentControl%2FContentControl.cs%23L308%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fgithub.com%2Funoplatform%2Funo%2Fblob%2Fmaster%2Fsrc%2FUno.UI%2FUI%2FXaml%2FControls%2FContentControl%2FContentControl.cs%23L308%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%E3%81%A8%E3%81%84%E3%81%86%E3%81%93%E3%81%A8%E3%81%A7%20Uno%20Platform%20%E3%81%AF%E3%80%81%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%82%82%E7%B6%99%E7%B6%9A%E7%9A%84%E3%81%AB%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81%E3%81%97%E3%81%A6%E3%81%84%E3%81%93%E3%81%86%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E
Microsoft

Uno Platform を少し触ってみた感じ面白そうだと感じた部分を紹介したいと思います。

公式ページはこちらになります。

https://platform.uno/

簡単な説明

詳細は公式ドキュメントの What is the Uno Platform? にあるのでそちらを見ていただくとして個人的な解釈では UWP で開発した画面が、そのまま Android や iOS や Windows (当然ですが) や WebAssembly 上で動くといったものを目指してるものになります。

 

Xamarin.Forms も同じように XAML + C# の組み合わせでクロスプラットフォームアプリケーションを開発可能ですが、Uno Platform と比べて一番の違いは ContentControl があることだと思ってます。

WPF で登場したコンテンツモデルによって柔軟な見た目をコントロールで実現できるようになりました。Xamarin.Forms は XAML + C# で開発したものを、ネイティブコントロールにマッピングするということはしてくれていたのですが、このコンテンツモデルは持ち合わせていなかったので、例えば以下のような XAML は、Xamarin.Forms では実現できませんでした。

 

<Button HorizontalAlignment="Center" VerticalAlignment="Center">
    <StackPanel Orientation="Horizontal">
        <Ellipse Width="30" Height="30" Fill="Blue" />
        <TextBlock Text="Rich button!!" />
        <Ellipse Width="30" Height="30" Fill="Blue" />
    </StackPanel>
</Button>

 

実行するとボタンの中に青い丸と、テキストが並んだ状態で表示されます。(左から Android、UWP、WebAssembly)

clipboard_image_0.png

WPF、UWP と XAML での開発に慣れていた私は、無意識のうちにこの柔軟性をがあるのが XAML での開発だと思ってたので Xamarin.Forms による開発は若干不自由に感じていました。

どっちがいいというのは無いと思っていて、Xamarin.Forms はレンダラーによってコントロールをネイティブプラットフォームのコントロールにマッピングすることでクロスプラットフォームの開発を実現していて、Uno は UWP で書いたものを各プラットフォームで動くようにしたというアプローチの違いです。

 

WPF、UWP の開発のバックグラウンドがある人にとっては Uno Platform は、とてもとっつきやすいプラットフォームに仕上がってると思います。

プラットフォーム固有機能へのアクセス

プラットフォーム固有機能へのアクセス方法も提供されています。C# と XAML の両方で可能です。

C# のほうは #if で分岐したり partial class を使う例が紹介されていますが、コードが Shared プロジェクトにあることを考えると単に各プラットフォーム固有のプロジェクト(iOS, Droid, UWP, Wasm)に同じインターフェースを持った同名のクラスを作って、中身はプラットフォーム固有実装という形で対応できます。例えばユーザーに何かしらあったことを通知したいときに Android ではトースト、iOS ではアラート、UWP ではトースト通知、WebAssembly ではダイアログという形で実装した場合は、以下のようなクラスを各プロジェクトに用意します。

 

Android プロジェクト

 

using Android.App;
using Android.Widget;

namespace HelloUno
{
    public class Toast
    {
        public static void Show(string text)
        {
            Android.Widget.Toast.MakeText(Application.Context, text, ToastLength.Long).Show();
        }
    }
}

 

 

iOS プロジェクト

 

using UIKit;

namespace HelloUno
{
    public class Toast
    {
        public static void Show(string text)
        {
            var alert = UIAlertController.Create("Toast", text, UIAlertControllerStyle.Alert);
            alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, _ => { }));
            UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alert, true, null);
        }
    }
}

 

UWP プロジェクト

 

using System.Linq;
using Windows.UI.Notifications;

namespace HelloUno
{
    public class Toast
    {
        public static void Show(string text)
        {
            var n = ToastNotificationManager.CreateToastNotifier();
            var content = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
            var textNode = content.GetElementsByTagName("text").First();
            textNode.InnerText = text;
            n.Show(new ToastNotification(content));
        }
    }
}

 

WebAssembly 用プロジェクト

 

using System;
using Windows.UI.Popups;

namespace HelloUno
{
    public class Toast
    {
        public static async void Show(string text)
        {
            await new MessageDialog(text).ShowAsync();
        }
    }
}

 

iOS は手元にないので確認できていませんが、Android と UWP と WebAssembly では以下のようになります。

clipboard_image_1.png

clipboard_image_2.png

clipboard_image_3.png

実際には一部だけプラットフォーム固有処理に切り出したいというケースとかもあるので partial method でプラットフォーム固有部分を切り出すか、今回のような完全にプラットフォーム固有処理は別々に作る場合もプラットフォーム間で実装に差異が生まれないようい Shared に interface を定義して、各プラットフォームのプロジェクトで実装という形にすると思います。

 

XAML でのプラットフォーム固有機能を使う場合も上記ドキュメントにあるように XML 名前空間を使ってすっきりと書けます。さらに、xmlns:native_android="using:Android.Widget" といったようなネイティブのコントロールの名前空間を定義して、xmlns:android="http://uno.ui/android" のようなプラットフォーム固有機能を書く機能と組み合わせると、ネイティブのコントロールを明示的に置くこともできます。

 

以下のような XAML を書いて

 

<Page
    x:Class="HelloUno.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloUno"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:android="http://uno.ui/android"
    xmlns:native_android="using:Android.Widget"
    mc:Ignorable="d android">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_Click">
            <StackPanel Orientation="Horizontal">
                <Ellipse Width="30" Height="30" Fill="Blue" />
                <TextBlock Text="Rich button!!" VerticalAlignment="Center" Margin="10" />
                <android:Border>
                    <native_android:TextView Text="Android Native!!"/>
                </android:Border>
                <Ellipse Width="30" Height="30" Fill="Blue" />
            </StackPanel>
        </Button>
    </Grid>
</Page>

 

実行すると Android 側にだけ追加でテキストが表示されています。

clipboard_image_4.png

Uno Platform を使ってるアプリ

以下の Issue で Uno Platform を使ってるアプリが紹介されてます。興味があったら実際にインストールしてみるといいかもしれません。

https://github.com/unoplatform/uno/issues/18

まとめ

Uno Platform は、WPF や UWP をやっていた人が、これ欲しかったと思うようなクロスプラットフォームアプリケーション開発ツールになってます。

愚直に UWP の API を各ネイティブにマッピングしてるので、ソースコードを見てみると面白いです。

 

個人的なお勧めは Uno.UI フォルダー以下です。

https://github.com/unoplatform/uno/tree/master/src/Uno.UI

 

例えば ContentControl の UpdateContentTemplateRoot メソッドとか頑張ってコンテンツモデルを再現してる感じがうかがえます。

https://github.com/unoplatform/uno/blob/master/src/Uno.UI/UI/Xaml/Controls/ContentControl/ContentCon...

 

ということで Uno Platform は、これからも継続的にウォッチしていこうと思います。