2011-08-03 108 views
1

我需要将followinf代码转换为c#代码。 有一种工具可以自动执行它? 谢谢将XAML转换为c#

<ListView Name="listView" Margin="0,0,0,164"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Header="Devise" DisplayMemberBinding="{Binding Path=devise}" Width="80" /> 
        <GridViewColumn Header="Libelle" DisplayMemberBinding="{Binding Path=label}" Width="120" /> 
        <GridViewColumn Header="Unite" DisplayMemberBinding="{Binding Path=unite}" Width="80" /> 
        <GridViewColumn Header="Achat" DisplayMemberBinding="{Binding Path=achatBanque}" Width="80" /> 
        <GridViewColumn Header="Vente" DisplayMemberBinding="{Binding Path=venteBanque}" Width="80" />  
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 
+0

你是如何试图将其转换为C#?为'listView'设置视图?你的问题依然没有多大意义。 – vcsjones

+0

好吧,我认为在@Mark编辑问题后标题可以。 +1只是为了证明事情:) –

+0

@vcsjones:不,XAML没有定义类的含义。它只是定义了结构,并且有相同的C#代码可以创建相同的对象树。实际上,'XamlReader' /'BamlReader'正在做什么。 –

回答

1

没有没有自动做到这一点的工具,但一般而言,您可以采取的属性,并将其更改为设置属性。尽管您可能会失去某些类型的自动转换功能,但在这种情况下,您只需确定属性的类型并使用它(如下面的边距)即可。

例如:

var gridView = new GridView(); 

gridView.Columns.Add(new GridViewColumn() { 
    Header = "Devise", 
    DisplayMemberBinding = new Binding() { Path = "devise" }, 
    Width = 80 
}); 
// ... 

var listView = new ListView() { 
    Name = "listView", 
    Margin = new Thickness(0, 0, 0, 164), 
    View = gridView 
}; 
+0

这对香草样品很好,但转换器的好处在于无数的第三方控制,上面的直接方法并没有帮助!有没有办法在运行时查看“DOM”? – Kumar

+0

@Kumar - 这可能是可能的,但你无法反编译StaticResourceExtension。我确信还会遇到其他问题(如隐式样式和模板以及资源)。 – CodeNaked

5

我认为这样做不应该是硬(使用的CodeDOM),所以我就开始寻找解决方案的工作。来源可用at github。这只是一个开始,它不支持许多XAML的功能,但它适用于问题中的代码。

如果您认真对待此问题,可以进一步研究该代码。

在问题中的XAML产生下面的输出,这似乎工作:

private ListView Get() 
{ 
    ListView listView = new ListView(); 
    listView.Name = "listView"; 
    listView.Margin = ((Thickness)(TypeDescriptor.GetConverter(typeof(Thickness)).ConvertFromInvariantString("0,0,0,164"))); 
    GridView gridView = new GridView(); 
    GridViewColumn gridViewColumn = new GridViewColumn(); 
    gridViewColumn.Header = "Devise"; 
    Binding binding = new Binding(); 
    binding.Path = ((PropertyPath)(TypeDescriptor.GetConverter(typeof(PropertyPath)).ConvertFromInvariantString("devise"))); 
    gridViewColumn.DisplayMemberBinding = binding; 
    gridViewColumn.Width = 80D; 
    gridView.Columns.Add(gridViewColumn); 
    GridViewColumn gridViewColumn2 = new GridViewColumn(); 
    gridViewColumn2.Header = "Libelle"; 
    Binding binding2 = new Binding(); 
    binding2.Path = ((PropertyPath)(TypeDescriptor.GetConverter(typeof(PropertyPath)).ConvertFromInvariantString("label"))); 
    gridViewColumn2.DisplayMemberBinding = binding2; 
    gridViewColumn2.Width = 120D; 
    gridView.Columns.Add(gridViewColumn2); 
    GridViewColumn gridViewColumn3 = new GridViewColumn(); 
    gridViewColumn3.Header = "Unite"; 
    Binding binding3 = new Binding(); 
    binding3.Path = ((PropertyPath)(TypeDescriptor.GetConverter(typeof(PropertyPath)).ConvertFromInvariantString("unite"))); 
    gridViewColumn3.DisplayMemberBinding = binding3; 
    gridViewColumn3.Width = 80D; 
    gridView.Columns.Add(gridViewColumn3); 
    GridViewColumn gridViewColumn4 = new GridViewColumn(); 
    gridViewColumn4.Header = "Achat"; 
    Binding binding4 = new Binding(); 
    binding4.Path = ((PropertyPath)(TypeDescriptor.GetConverter(typeof(PropertyPath)).ConvertFromInvariantString("achatBanque"))); 
    gridViewColumn4.DisplayMemberBinding = binding4; 
    gridViewColumn4.Width = 80D; 
    gridView.Columns.Add(gridViewColumn4); 
    GridViewColumn gridViewColumn5 = new GridViewColumn(); 
    gridViewColumn5.Header = "Vente"; 
    Binding binding5 = new Binding(); 
    binding5.Path = ((PropertyPath)(TypeDescriptor.GetConverter(typeof(PropertyPath)).ConvertFromInvariantString("venteBanque"))); 
    gridViewColumn5.DisplayMemberBinding = binding5; 
    gridViewColumn5.Width = 80D; 
    gridView.Columns.Add(gridViewColumn5); 
    listView.View = gridView; 
    return listView; 
} 
+0

...伟大的开始,如何添加第三方参考? – Kumar

+0

如果您的意思是如何处理来自第三方程序集的类型,那么应该在今天使用普通的'xmlns:something =“clr-namespace:Something”'语法对代码进行更新之后工作。请参阅演示应用程序中的示例。 – svick