【问题标题】:Do I need two xmlns:local="clr-namespace"?我需要两个 xmlns:local="clr-namespace" 吗?
【发布时间】:2013-02-02 11:03:47
【问题描述】:

这是我希望在 Visual Studio 2010 中使用 c# 为我的 Windows Phone 应用程序进行的设置:

**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 的实例。现在不同了,我有两个错误。

-本地类型:找不到AppSettings

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

我想这是因为我没有放

 xmlns:local="clr-namespace:PhoneApp"

但我已经有了

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

并且不能两者兼而有之。(对我来说,一个包含在另一个中......)我列出所有情况的原因是因为我有点期待在我解决这个问题后会遇到其他麻烦. 我希望这个信息足够清楚,有人可以帮助我。我花了这么多时间,我开始失去理智,所以我希望没有愚蠢的错误。当然,我可以添加任何需要的信息。无论如何感谢您的阅读!

【问题讨论】:

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


    【解决方案1】:

    我需要在同一个文件中导入两个本地文件,如下所示

    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"
    

    【讨论】:

      【解决方案2】:

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

      xmlns:local="clr-namespace:PhoneApp"
      

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

      <local:MyClassInPhoneAppNamespace/>
      

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

      xmlns:fish="clr-namespace:PhoneApp"
      

      并按如下方式使用:

      <fish:MyClassInPhoneAppNamespace/>
      

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

      【讨论】:

      • TriggerPin 和 ColinE,谢谢。我不知道。令我惊讶的是,它现在有效。我会查看 TriggerPin 的帖子作为答案,并在我的应用中留下“鱼”这个词作为对 ColinE 的致敬!
      • 谢谢,没有比这更好的致敬了!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 2017-09-25
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        相关资源
        最近更新 更多