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

Eri*_*ppe 6 c# silverlight settings xml-namespaces windows-phone-7

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

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

**MainPage.xaml.cs**       
Run Code Online (Sandbox Code Playgroud)

第一个Namespace是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"
Run Code Online (Sandbox Code Playgroud)

我需要这个使用附加属性

<phone:PhoneApplicationPage.Resources>
    <local:AppSettings x:Key="appSettings"></local:AppSettings>
</phone:PhoneApplicationPage.Resources>
Run Code Online (Sandbox Code Playgroud)

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

xmlns:local="clr-namespace:SettingsSample"
Run Code Online (Sandbox Code Playgroud)

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

主页的一些元素有这个例子,例如:

local:MyClass.Son="{Binding Source={StaticResource appSettings}, Path=son1, Mode=TwoWay}" Style="{StaticResource pad}"
Run Code Online (Sandbox Code Playgroud)

"儿子"是附属物

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

- 本地类型:找不到AppSettings

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

我想这是因为我没有把

 xmlns:local="clr-namespace:PhoneApp"
Run Code Online (Sandbox Code Playgroud)

但我已经有了

xmlns:local="clr-namespace:PhoneApp.MyNamespace"
Run Code Online (Sandbox Code Playgroud)

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

Col*_*inE 10

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

xmlns:local="clr-namespace:PhoneApp"
Run Code Online (Sandbox Code Playgroud)

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

<local:MyClassInPhoneAppNamespace/>
Run Code Online (Sandbox Code Playgroud)

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

xmlns:fish="clr-namespace:PhoneApp"
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

<fish:MyClassInPhoneAppNamespace/>
Run Code Online (Sandbox Code Playgroud)

这应该意味着你不再有碰撞.

  • TriggerPin 和 ColinE,谢谢你们。我不知道。令我惊讶的是,现在它可以工作了。我将查看 TriggerPin 的帖子作为答案,并将在我的应用程序中留下“鱼”一词,以向 ColinE 致敬! (2认同)
  • 谢谢,我不能要求更好的致敬! (2认同)

Sil*_*ver 6

在这种情况下,“local”只是您引用的命名空间的友好名称。它是完全可以互换的。