XAML命名空间命名约定

时间:2011-12-30 15:00:34

标签: wpf xml xaml naming-conventions

我有一个名为test的C#WPF项目。我应该如何在XAML中命名子命名空间?

<Window x:Class="test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
    xmlns:local="clr-namespace:test"
    xmlns:local.c="clr-namespace:test.Converters"   
    xmlns:local.v="clr-namespace:test.Validators"       
    Title="MainWindow" Height="360" Width="640"> ....

这里我有一个用子句分隔子包的约定..可以吗?

亲切的问候,

例如

2 个答案:

答案 0 :(得分:9)

如果可能,更好的做法是将您使用的C#名称空间与WPF名称空间分开。这也将减少您拥有的导入数量。这可以通过XmlnsDefinition类来完成。

<Window x:Class="test.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
  xmlns:test="http://whatever.com/test">

在库的AssemblyInfo.cs中,您只需要添加:

[assembly: XmlnsDefinition("http://whatever.com/test", "test")]
[assembly: XmlnsDefinition("http://whatever.com/test", "test.Converters")]
[assembly: XmlnsDefinition("http://whatever.com/test", "test.Validators")]
[assembly: XmlnsDefinition("http://whatever.com/test", "test.CustomControls")]

请注意,这仅适用于类与您引用它们的程序集不同的程序集。在同一个程序集中,您仍然需要使用C#名称空间。

您甚至可以通过将名称空间添加到WPF XML名称空间来完全消除导入:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "test")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "test.Converters")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "test.Validators")]

这允许人们写:

<Window x:Class="test.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
  >
  <!-- Note: no namespace prefix needed! -->
  <YourCustomControl />

答案 1 :(得分:1)

典型的WPF应用程序实际上没有XAML的命名空间约定,除了默认的xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",Blend设计时命名空间和xmlns:local通常会引用当前的命名空间。

在上面描述的场景中,我已经看到/使用了一些变体,即

<Window x:Class="test.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
  xmlns:local="clr-namespace:test"
  xmlns:c="clr-namespace:test.Converters"   
  xmlns:v="clr-namespace:test.Validators">

<Window x:Class="test.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
  xmlns:local="clr-namespace:test"
  xmlns:conv="clr-namespace:test.Converters"   
  xmlns:val="clr-namespace:test.Validators">

最后,这完全取决于你和你的团队所同意的。