![](/img/trans.png)
[英]Unable to replicate examples of running ironpython in browser with silverlight
[英]Silverlight databinding with IronPython and Datagrid
根據Lukás提供的示例,我們已成功將clrtype與IronPython 2.6和Silverlight進行數據綁定。
http://gui-at.blogspot.com/2009/11/inotifypropertychanged-and-databinding.html
當我們以編程方式創建datagrid列時,便會創建綁定。 因為我們正在使用IronPython,所以您通常在C#中使用的某些靜態數據綁定技術不起作用。
我一直在嘗試(但失敗)使網格中的列根據數據綁定顯示不同的顏色。
我已經在網格中顯示了彩色的氣泡,但是無法將數據綁定到該顏色上去。 首先是基礎。
這是帶有固定顏色的氣泡的xaml:
<DataTemplate xmlns='http://schemas.microsoft.com/client/2007'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Ellipse Stroke="#FF222222" Height="15" Width="15">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop x:Name="bubbleColor" Offset="0.694"
Color="#FF00FF40" />
<GradientStop Color="#FFE6E6E6"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
我可以非常簡單地基於此模板添加一列。 loadXaml函數是XamlReader.Load
一個薄包裝:
from com_modules.loadxaml import loadXaml
from System.Windows.Controls import DataGridTemplateColumn
column = DataGridTemplateColumn()
column.CellTemplate = loadXaml('templatecolumn')
column.Header = 'Bubble'
grid.Columns.Add(column)
如果我嘗試天真的在xaml中指定綁定,則在嘗試加載xaml時會得到PARSER_BAD_PROPERTY_VALUE(因此,在加載后不希望設置綁定):
<GradientStop x:Name="bubbleColor" Offset="0.694" Color="{Binding color}" />
我嘗試的一種方法是創建一個ValueConverter。 這是我創建的類的框架:
from System import Type
from System.Globalization import CultureInfo
from System.Windows.Data import IValueConverter
class ColorConverter(IValueConverter):
_clrnamespace = "Converters"
__metaclass__ = clrtype.ClrClass
@clrtype.accepts(object, Type, object, CultureInfo)
@clrtype.returns(object)
def Convert(self, value, targetType, parameter, culture):
pass
@clrtype.accepts(object, Type, object, CultureInfo)
@clrtype.returns(object)
def ConvertBack(self, value, targetType, parameter, culture):
pass
由於指定了_clrnamespace
我認為我也許可以在xaml中使用此轉換器。 再次嘗試在資源字典中的Converters
命名空間中引用ColorConverter
類會導致加載xaml時崩潰。
以編程方式進行設置將是理想的。 任何人有任何想法嗎?
我對IronPython一無所知,但是我知道,無論使用哪種語言,您都無法在Silverlight中綁定到Color。 這引起了我很多不滿。 在Silverlight 3中,您只能在FrameworkElement上綁定屬性,並且由於GradientStop是DependencyObject,因此它將不起作用。 好消息是,Silverlight 4將擺脫該限制,並允許您在DependencyObject上綁定屬性。 我還沒有嘗試過,所以我不能肯定地說。 更多信息在這里:
http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#dobind
目前,您可以做的是綁定Ellipse的Fill屬性。 但是隨后您將必須在轉換器代碼中創建整個LinearGradientBrush,因此有點復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.