将 WPF XAML 代码移植到 Silverlight XAML 代码

Posted

技术标签:

【中文标题】将 WPF XAML 代码移植到 Silverlight XAML 代码【英文标题】:Porting WPF XAML code to Silverlight XAML code 【发布时间】:2014-03-14 05:30:27 【问题描述】:

我有一些 WPF XAML 代码,在尝试制作等效 Silverlight 时遇到了一些重大问题。现在,在有人开始抱怨这两者如何不兼容之前,我已经知道了。我需要创建一个与我现在拥有的代码具有相似外观的 Silverlight 应用程序。我能够转换我的所有 C# 类,但 XAML 代码很痛苦。这是我遇到问题的 WPF 的 XAML 代码:

<ControlTemplate x:Key="DesignerItemTemplate" TargetType="ContentControl">
  <Grid DataContext="Binding RelativeSource=RelativeSource TemplatedParent">
    <s:MoveThumb Template="StaticResource MoveThumbTemplate" Cursor="SizeAll"/>
    <ContentPresenter Content="TemplateBinding ContentControl.Content"/>
  </Grid>
</ControlTemplate>

问题是我在 s: 下看不到 MoveThumb,这是我的项目的命名空间(MoveThumb 是一个 C# 类)。任何建议将不胜感激。

编辑 这是 Silverlight 项目的所有代码。请意识到我还远远没有完成这个过渡,而且我不一定会就代码其他部分的其他问题寻求帮助;就这一部分(Designer Item Template 下的部分。

<UserControl x:Class="SilverlightFlowConnectors.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:s="clr-namespace:SilverlightFlowConnectors"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<UserControl.Resources>
    <!-- MoveThumb Template -->
    <ControlTemplate x:Key="MoveThumbTemplate" TargetType="s:MoveThumb">
        <Rectangle Fill="Transparent"/>
    </ControlTemplate>

    <!-- Designer Item Template-->
    <ControlTemplate x:Key="DesignerItemTemplate" TargetType="ContentControl">
        <Grid DataContext="StaticResource MoveThumbTemplate">

        </Grid>
    </ControlTemplate>
</UserControl.Resources>

<Canvas>
    <ContentControl Width="130"
                MinWidth="50"
                Height="130"
                MinHeight="50"
                Canvas.Top="150"
                Canvas.Left="470">
        <Ellipse Fill="Red"
           IsHitTestVisible="False"/>
    </ContentControl>
    <ContentControl Width="130"
                MinWidth="50"
                Height="130"
                MinHeight="50"
                Canvas.Top="150"
                Canvas.Left="150">
        <Path Fill="Blue"
        Data="M 0,5 5,0 10,5 5,10 Z"
        Stretch="Fill"
        IsHitTestVisible="False"/>
    </ContentControl>
    <ContentControl Width="130"
        MinWidth="50"
        Height="130"
        MinHeight="50"
        Canvas.Top="150"
        Canvas.Left="150"
        Template="StaticResource DesignerItemTemplate">
        <Path Fill="Blue"
            Data="M 0,5 5,0 10,5 5,10 Z"
            Stretch="Fill"
            IsHitTestVisible="False"/>
    </ContentControl>
</Canvas>

【问题讨论】:

SL 中没有 SizeAll 光标,如果不知道您的命名空间是如何设置的,其余部分很难说。 【参考方案1】:

您需要创建一个命名空间短字符串s,它以您当前拥有 MoveThumb 的位置为目标,或者修复您移植的列表。如果没有别的,只需在 intellisense 的帮助下重做 s

【讨论】:

我已经这样做了(我觉得不需要包含并非完全必要的代码)。智能感知将在控制模板之外接收我的课程,但不会在其中。 @user3311309 s 是否包含您可以在 xaml 中访问的任何其他项目?这可能会给你一个线索,为什么 s 不起作用。 在 ControlTemplate 之外,我可以访问我的所有课程。在 ControlTemplate 内部,我只能访问 MainPage。在网格内部,我无法访问任何内容。这真的让我很难过。我觉得我在这里遗漏了一些东西。

以上是关于将 WPF XAML 代码移植到 Silverlight XAML 代码的主要内容,如果未能解决你的问题,请参考以下文章

将图像绘制代码从WinForm移植到WPF [重复]

我应该如何将多个控件添加到 WPF 窗口? [复制]

从 XAML 到 C# 的 WPF 故事板

WPF如何更改xaml代码里ListBox的数据绑定

将 XAML 中 WPF 窗口的启动位置更改为右下角

WPF:将变量从父 xaml 传递到用户控件