我需要两个xmlns:local =“clr-namespace”?

时间:2013-02-18 03:44:09

标签: c# silverlight windows-phone-7 settings xml-namespaces

以下是我想在Windows Phone应用中使用的设置,在visual studio 2010中使用c#:

**MainPage.xaml**包含具有附加属性的元素,其值可由用户修改/保存。

**MainPage.xaml.cs**       

第一个名称空间是PhoneApp,里面是一个名为MyNamespace的嵌套名称空间,它声明了依赖项属性。它有效(谢谢,丹尼尔)

**SettingsSample.xaml**,允许用户在MainPage.xaml中为任何元素更改附加属性的值,并自动保存更改。

**AppSettings.cs**一个完全重现本教程中第一个列表的类: http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769510%28v=vs.105%29.aspx

该页面声明与MainPage.xaml.cs(PhoneApp)相同的NameSpace,然后是一个名为AppSettings的公共类,与教程中的完全相同。

为了把所有东西加在一起,我做了:

**MainPage.xaml**

xmlns:local="clr-namespace:PhoneApp.MyNamespace"

我需要这个才能使用附加属性

<phone:PhoneApplicationPage.Resources>
    <local:AppSettings x:Key="appSettings"></local:AppSettings>
</phone:PhoneApplicationPage.Resources>

混乱开始了。在教程中,他们把它放在设置页面上,但我想因为他们的设置页面也是包含具有绑定到保存设置的属性的元素的页面。我在主页上,所以我把它放在这里。回顾一下,我的设置页面将仅使用方法来更改/保存这些值(这些方法在AppSettings.cs中)。同样在教程中,他们添加了这个:

xmlns:local="clr-namespace:SettingsSample"

到设置页面(其中“SettingsSample”是包含可保存设置的声明/ get-Set方法的命名空间)但是,出于同样的原因,我试图将它放在主页上,但只有一个xmlns声明:local可以做到。我试了好几件东西把它们一个接一个地放了,但它不起作用。这是我将在下面列出的两个错误的关键。

主页的某些元素具有此功能,例如:

local:MyClass.Son="{Binding Source={StaticResource appSettings}, Path=son1, Mode=TwoWay}" Style="{StaticResource pad}"

“儿子”是附属物

好的,所以我尝试了不同的东西,但它从未奏效。我能得到的最好的是MainPage.xaml,它无法创建AppSettings的实例。现在情况有所不同,我有两个错误。

- 类型local:找不到AppSettings

- 标签AppSettings在xml名称空间PhoneApp.MyNamespace中不存在。

我认为这是因为我没有把

 xmlns:local="clr-namespace:PhoneApp"

但我已经

xmlns:local="clr-namespace:PhoneApp.MyNamespace"

并且不能同时放两个。(对我来说,一个被包含在另一个......)我列出所有的ins和出于这种情况的原因是因为在我通过这个之后我有点期待其他麻烦。  我希望这个消息足够清楚,有人可以帮助我。我花了很多时间才开始放松心情,所以我希望没有愚蠢的错误。当然,我可以添加所需的任何信息。无论如何,谢谢你的阅读!

3 个答案:

答案 0 :(得分:10)

这些是XML命名空间映射。有以下内容:

xmlns:local="clr-namespace:PhoneApp"

local部分是XML命名空间,而PhoneApp是.NET代码的命名空间。有了这个定义,你就可以用XML引用这个命名空间中的类,如下所示:

<local:MyClassInPhoneAppNamespace/>

因为local部分只是一个名称,您可以将其更改为您喜欢的任何名称:

xmlns:fish="clr-namespace:PhoneApp"

使用如下:

<fish:MyClassInPhoneAppNamespace/>

这应该意味着您不再有碰撞。

答案 1 :(得分:3)

在这种情况下,

“local”只是您引用的命名空间的友好名称。它是完全可以互换的。

答案 2 :(得分:0)

我需要在以下相同文件中导入两个本地

xmlns:local="clr-namespace:Generique.Views.Assets.Entries"
xmlns:local="clr-namespace:Generique.Views.Assets"

我只是更改名称,效果很好

xmlns:local="clr-namespace:Generique.Views.Assets.Entries"
xmlns:footer="clr-namespace:Generique.Views.Assets"