【问题标题】:Silverlight 3 and Silverlight 4 conditional xamlSilverlight 3 和 Silverlight 4 条件 xaml
【发布时间】:2011-07-11 03:04:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: silverlight xaml conditional-compilation


    【解决方案1】:

    我最终做的是在内部视图框元素周围创建一个边框。然后我摆脱了 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};
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • OK - 封装 ViewBox 的 UserControl 怎么样?
      • 我想过,但视图框仍会在 xaml 中
      • 不,SL3 和 SL4 的用户控件不同。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        相关资源
        最近更新 更多