gpt4 book ai didi

c# - 如何以编程方式更改 WPF TabControl 中的选项卡名称?

转载 作者:行者123 更新时间:2023-12-02 15:04:16 25 4
gpt4 key购买 nike

全部,

我在这里广泛搜索了解决方案,但我感觉我的问题源于对 WPF 基本知识的缺乏。我对它很陌生,到目前为止,我已经尽我所能地通过黑客和谷歌搜索了我的方法。

基本上,我有一个与 TabControl 动态交互的功能区。功能区选项卡选择项目类别,然后功能区组中的菜单项选择该类别中的项目。单击某个项目后,TabControl 上的选项卡需要动态更改。无论是标题、选项卡本身还是整个 TabControl 都适合我。到目前为止,在单击 RibbonGroups 内部的一个 MenuItem 时,我尝试将 TabControl 上每个选项卡的标题文本设置为等于“blah”。然后 Header 对象抛出一个空指针。无论我设置标题、选项卡还是 TabControl 本身,都会发生这种情况。

为什么?!?!?!?

...我到底该如何解决这个问题???

谢谢!

最佳答案

WPF 的设计考虑到了数据/UI 分离。您难以找到解决方案的原因之一是因为您尝试做的事情是禁忌;您应该更改底层数据,并允许 WPF 管道更新数据的显示方式,而不是以编程方式更改 UI 的标题文本。

WPF 选项卡控件实际上可以包含任何类型的对象;你可以用整数、字符串、FooBars 或其他什么来填充它。不能保证这些对象中的任何一个都会定义 Header 属性,并且由开发人员配置数据绑定(bind)或模板来指示 TabControl 如何显示 FooBar 或其他内容。

在遵循 MVVM 设计模式的理想 WPF 应用程序中,您可能会将 TabControl 绑定(bind)到 View 模型的集合,每个 View 模型都定义一个 HeaderText 属性。您的 View 模型将实现 INotifyPropertyChanged 接口(interface),以便当 View 模型上的 HeaderText 属性发生更改时,UI 将会更新。

话虽如此,如果您有一个现有的应用程序,那么使用不同的设计模式从头开始重写它可能是不现实的,而且 MVVM 也不容易添加到现有的代码库中。如果您正在使用简单的设计器生成的 UI,而不使用任何数据绑定(bind),那么以下代码将满足您的要求。有时。

foreach(TabItem item in tabControl.Items)
item.Header = "blah";

...但正如我之前所说,不能保证 WPF TabControl 的 Items 集合将包含 TabItem 类型的项,因此此代码不安全。

关于c# - 如何以编程方式更改 WPF TabControl 中的选项卡名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17411972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com