我的用户控件XAML文件中存在奇怪的命名空间解析问题。
如果我创建一个新的WPF库,它会添加以下内容:
<UserControl x:Class="UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
</Grid>
</UserControl>
这将评估为MyLibraryNameSpace.UserControl1的类名。
但是,如果我添加一个Silverlight类库并将UserControl添加到该应用程序,我将获得以下XAML
<UserControl x:Class="MyLibraryNameSpace.UserControl1"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
</Grid>
</UserControl>
这评估同样的事情,但是XAML是不同的,所以我不能让Silverlight和WPF项目引用相同的XAML,因为x:Class语句对于一个是正确的而对另一个是不正确的。如果我在WPF中指定x:Class =“MyLibraryNameSpace.UserControl1”,它将被解释为我当前项目下的MyLibraryNameSpace.MyLibraryNameSpace.UserControl1。
如何让我的WPF库使用完全限定的类名或以其他方式解决此方案,以便我可以使用单个命名空间来共享WPF / Silverlight代码?
答案 0 :(得分:0)
我越想到这一点,我就越认为这只是一个设计决策,他们在WPF和Silverlight团队之间做出了不同的决定,并且因为害怕破坏向后兼容性而没有调整内容。
我最后要做的是创建两个子文件夹:一个用于WPF,另一个用于Silverlight。 .xaml.cs文件保存在controls文件夹中,但XAML已复制到Silverlight和WPF文件夹并稍作修改。这样,至少背后的代码是共享的。接下来,我将使用控件而不是用户控件,并在可能的时候将现有用户控件转换为控件( 让我共享XAML)。
故事的道德:使用WPF / Silverlight多目标控件,而不是用户控件。
答案 1 :(得分:0)
在WPF和Silverlight之间共享一个UserControl是完全可能的(不管是一个好主意我会留给别人,对我而言,这取决于你能分享多少)。共享XAML肯定比共享代码更难,因为你无法依靠能够解决不兼容问题。我希望您的Silverlight XAML能够按原样在WPF中工作。
我通常采用的方法是
我真的没看到x:Name与你的问题有关,WPF和Silverlight都有这个。