- Android tablet in each kiosk connected to the Internet via 3G modem
- HTML SPA (Single Page Application) as client POS application running in the browser on the tablet
- JavaScript Azure Mobile Services with SQL database as server
Saturday, July 26, 2014
POS for Ice-cream Kiosks
Sunday, November 13, 2011
Sharing .xaml in WPF and Silverlight
Sharing code between WPF and Silverlight is not difficult. Good how-to is in the Prism guide. However sharing more complex .xaml is not so easy. You have to handle different namespaces and properties.
Handling different namespaces
Silverlight toolkit components are accessible via special namespace. So if you want to use a WrapPanel in Silverlight, you write something like this:
<UserControl x:Class="UnifiedXaml.TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">
<toolkit:WrapPanel></toolkit:WrapPanel>
</UserControl>
WPF world is easier:
<UserControl x:Class="UnifiedXaml.TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<WrapPanel></WrapPanel>
</UserControl>
It's clear those two .xaml files are so similar that they should be just one file. Here is one tiny line that makes it possible:
namespace UnifiedXaml
{
public class MyWrapPanel: WrapPanel { }
}
From now on, you can share the .xaml file:
<UserControl x:Class="UnifiedXaml.TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ux="clr-namespace:UnifiedXaml">
<ux:MyWrapPanel></ux:MyWrapPanel>
</UserControl>
Handling different properties
When you follow Prism guidelines, you have separate projects for WPF and Silverlight parts. That means the WPF/SL application resources dictionaries are also separate. So the easiest way to handle different properties is to use styles. Shared .xaml file specifies just the control and its style. All necessary properties for WPF are defined in the style stored in the WPF application resources dictionary and the same is done for Silverlight.
Friday, September 10, 2010
Anonymous function as default argument in methods
class ListObject(object):
items = ((1, 'one'), (2, 'two'), (3, 'three'))
def get_num(self, item):
return item[0]
def get_text(self, item):
return item[1]
def get_list(self, fn=lambda s, i: ListObject.get_num(s, i)):
return [fn(self, j) for j in self.items]
lo = ListObject()
print 'numbers:', lo.get_list()
print 'texts:', lo.get_list(ListObject.get_text)
print 'texts:', lo.get_list(lambda s, i: i[1])
print 'items:', lo.get_list(lambda s, i: i)
When you run this piece of code you get what you want:
numbers: [1, 2, 3] texts: ['one', 'two', 'three'] texts: ['one', 'two', 'three'] items: [(1, 'one'), (2, 'two'), (3, 'three')]By default, get_list method uses get_num method and apply it to all items. But you can supply your own fucntion to apply it on items.
Of course, this is very stupid example but it shows the principle. And this principle is quite handy for UI automation I am currently working on :-)
