2011-07-11 81 views
2

我正在处理一个项目,现在必须分离项目文件。一个符合Silverlight 3,另一个符合Silverlight 4.该项目创建一个用于其他项目的用户控件。不幸的是,一个在SL3中,现在不能升级,这就是为什么需要SL3版本的控制。Silverlight 3和Silverlight 4有条件的xaml

到目前为止,它工作得很好,但最近我试图添加一个ViewBox到控件。这会导致问题,因为在SL3中它位于工具箱中,在SL4中它在核心中。

有什么办法可以从SL3项目的工具箱和SL4项目的核心中获得它?我研究了xaml中的预处理器定义并找到了一些信息,但我不喜欢它如何杀死在设计器中加载代码的能力。

回答

1

我最终做的是围绕内部视框元素创建边框。然后我摆脱了xaml中的viewbox。当我加载控件时,我将包含边框的子元素设置为null,在代码中创建一个viewbox,并将其子设置为内边框。然后,我将包含边框的子项设置为视图框。

<Border Name="viewBoxContainer"> 
    <Border x:Name="innerBorder"> 
     <TextBlock x:Name="innerText" Text="Test" /> 
    </Border> 
</Border> 

代码隐藏

this.viewBoxContainer.Child = null; 
this.viewBoxContainer.Child = new Viewbox { Child = this.innerBorder}; 
0

不,不支持XAML中的条件复杂化。如何在每个项目中创建您自己的子类:

SL3的项目中:

using //namespace for SL3 ViewBox 

namepsace MyProjectNamespace 
{  
    public class MyViewBox : ViewBox 
    { 
    }  
} 

的SL4项目中:

using //namespace for SL4 ViewBox 

namepsace MyProjectNamespace 
{  
    public class MyViewBox : ViewBox 
    { 
    }  
} 

您共同XAML文件中:

<UserControl ... 
     xmlns:local="clr-namespace:MyProjectNamespace"> 
    <local:MyViewBox> 
    .. content goes here .. 
    </local:MyViewBox> 
</UserControl> 
+0

Viewbox是一个密封类 – thecaptain0220

+0

好吧 - 如何封装一个ViewBox的UserControl? – ColinE

+0

我想过,但viewbox仍然在xaml – thecaptain0220

0

我们有同样的问题,而我们的解决方案是使我们自己的视框中这是全线使用。基本上,我们只是将SL3工具包中提供的Viewbox的源代码复制并放到我们自己的名称空间中,然后将其重命名为MyViewbox之类的东西。

我不确定这是最好的解决方案,但它对我们来说工作得很好。