繁体   English   中英

Silverlight 3 和 Silverlight 4 条件 xaml

[英]Silverlight 3 and Silverlight 4 conditional xaml

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

到目前为止,它运行良好,但最近我尝试向控件添加一个 ViewBox。 这会导致问题,因为在 SL3 中它位于工具箱中,而在 SL4 中它位于核心中。

有没有办法让它从 SL3 项目中的工具包和 SL4 项目中的核心中提取? 我查看了 xaml 中的预处理器定义并找到了一些信息,但我不喜欢它如何扼杀在设计器中加载代码的能力。

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

<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};

不,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>

我们遇到了同样的问题,我们的解决方案是制作我们自己的视图框,以便全面使用。

基本上,我们只是获取了 SL3 工具包中提供的 Viewbox 的源代码,将其复制并放入我们自己的命名空间中,然后将其重命名为 MyViewbox 之类的名称。

我不确定这是最好的解决方案,但对我们来说效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM