将 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
。
【讨论】:
我已经这样做了(我觉得不需要包含并非完全必要的代码)。智能感知将在控制模板之外接收我的课程,但不会在其中。 @user3311309s
是否包含您可以在 xaml 中访问的任何其他项目?这可能会给你一个线索,为什么 s
不起作用。
在 ControlTemplate 之外,我可以访问我的所有课程。在 ControlTemplate 内部,我只能访问 MainPage。在网格内部,我无法访问任何内容。这真的让我很难过。我觉得我在这里遗漏了一些东西。以上是关于将 WPF XAML 代码移植到 Silverlight XAML 代码的主要内容,如果未能解决你的问题,请参考以下文章