WPF UI元素命名约定

Hei*_*nzi 30 wpf coding-style

尽管匈牙利命名法是时下认为是不好的做法,它仍然是很常见的编码中的名称类型的用户界面元素,无论是使用前缀(lblTitle,txtFirstName,...)或后缀(TitleLabel,FirstNameTextBox,...).

在我的公司,我们也这样做,因为它使得同事(或很久以前自己)编写的代码更容易阅读(根据我的经验).这个参数通常提出反对这样做 - 如果类型改变,你必须改变变量的名称 - 不是很强,因为改变UI元素的类型通常需要重写代码的所有部分,无论如何它被引用.

所以,我正在考虑在开始WPF开发时保持这种做法(嗯......我们应该使用txtTextBlocks或TextBoxes 的前缀吗?).我错过了什么大的劣势?这是你说"不要这样做,因为......"的机会.

编辑:我知道通过数据绑定,名称UI元素的需求减少.然而,有时需要它,例如在开发自定义控件时......

Ree*_*sey 31

就个人而言,我发现WPF在这方面改变了规则.通常情况下,您可以在很少或没有代码的情况下逃脱,因此使用前缀来区分名称会使事情变得更加混乱而不是更加混乱.

在Windows窗体中,每个控件都在代码中按名称引用.使用大型UI,半匈牙利符号很有用 - 更容易区分您正在使用的内容.

但是,在WPF中,这是一个需要名称的罕见控件.当你必须通过代码访问控制,通常最好使用附加属性或行为这样做,在这种情况下,你永远也处理的不是一个单一的控制措施.如果您正在使用UserControl或Window代码隐藏,我只使用"标题"和"名称"而不是"txtTitle",特别是因为现在您可能只会处理一些有限的控件,而不是所有这些.

在大多数情况下,即使是自定义控件也不需要名称.您将需要遵循约定的模板名称(即:PART_Name),但不是实际的x:UI的名称元素...


Phi*_*eck 13

根据我的经验 - 在WPF中,当您更改控件的类型时,除非您做错了什么,否则通常不必重写任何代码.实际上,大多数情况下,您不会在代码中引用控件.是的,您最终会这样做,但WPF中对UI元素的大多数引用都是由同一个XAML中的其他元素引用的.

就个人而言,我发现"lblTitle,lblCompany,txtFirstName"比"Title"更难阅读.我没有.intWidth和.intHeight(再见lpzstrName!).为什么有.lblFirstName?我可以理解TitleField或TitleInput或更多,因为它描述的是什么,而不是如何描述.

对我来说,希望有一个类型的分离通常意味着我的UI代码试图做太多 - 当然它在处理一个UI元素,它在窗口代码!如果我不处理UI元素周围的代码,为什么我会在这里编写代码呢?


Jef*_*ici 7

我喜欢使用约定(一般来说只是一个好主意),但对于UI的东西,我喜欢它在前面有控件的类型,后面是描述性名称 - LabelSummary,TextSummary,CheckboxIsValid等.

这听起来不起眼,但是对于把第一类主要的原因是,他们将一起出现在智能感知列表 - 所有的标签一起,复选框,等等.

  • 我不同意WPF与"糟糕的旧Winforms"有不同的使用模式,但我只需要寻找一个控件名称,以便欣赏一种易于查找的约定. (3认同)
  • 这有时也会很痛苦 - 我想找到标题,所以我尝试TextTi ... oops.它是组合吗?ComboTitl ......呃,没有.哦,我们只允许两个 - 也许是单选按钮?RadioTitle!啊哈! (3认同)
  • 如果您发现自己经常使用 Intellisense 将控件名称键入到代码中,这可能意味着您正在使用 WPF,就好像它是“糟糕的旧 WinForms”一样,并且没有充分利用 WPF 的高级功能(数据绑定、模板等) )。 (2认同)

Jus*_*yle 6

即使从 Winforms 的角度来看,我也不喜欢半匈牙利人。

在我看来,最大的缺点是,我写了很多 ui 代码是匈牙利语使错误更难发现。如果您尝试更改文本框上的 checked 属性,编译器通常会选择它,但它不会选择以下内容:

lblSomeThing.Visible = someControlsVisible;
txtWhatThing.Visible = someControlsVisible;
pbSomeThing.Visible = someControlsVisible;
Run Code Online (Sandbox Code Playgroud)

我发现调试要容易得多:

someThingLabel.Visible = someControlsVisible;
whatThingTextBox.Visible = someControlsVisible;
someThingPictureBox.Visible = someControlsVisible;
Run Code Online (Sandbox Code Playgroud)

我还认为将 addCommentsButton 与 addCommentsTextBox 分组比将 btnAddComments 与 btnCloseWindow 分组要好得多。你什么时候打算一起使用最后两个?

至于找到我想要的控制,我同意 Philip Rieck。我经常想处理与特定逻辑概念(如标题或添加注释)相关的所有控件。我几乎从不想找到恰好在此控件上的任何或所有文本框。

这在 WPF 中可能无关紧要,但我认为应该始终避免使用匈牙利语。


Lya*_*all 5

同意其他答案,这主要是个人喜好,最重要的是保持一致。

鉴于数据绑定的普遍存在,命名的必要性......您可能需要考虑的一件事是您的 UI 是否曾经接受过自动化测试。像QTP这样的东西可以通过名称来查找应用程序中的视觉元素,因此,当选项卡、按钮等(任何交互式控件)等内容都得到良好命名时,编写测试脚本的自动化工程师将非常感激。