问题标签 [xaml-resources]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
20 浏览

xaml - XAML 样式中的重复

我有具有不同目标类型但在其他方面相同的 xaml 样式。有没有办法可以减少重复并只定义一次样式?

0 投票
1 回答
239 浏览

wpf - 如何从 prism 模块提供 DataTemplate

我有一个 WPF 应用程序,使用 Prism,我们正在使用一些模块(在全球范围内,还有很多微服务)。

我正在寻找向应用程序提供可用于表示模型的模板的最佳实践。

由于我必须从模块中执行此操作,因此我不能只创建一个 ResourcesDictionary 并将其添加到 App 资源中。

你会怎么做?我们的目标是对特征进行良好的隔离。

0 投票
1 回答
19 浏览

xaml - XAML - 从资源中定义的样式绑定到资源中定义的值

我有一个具有已定义资源的用户控件。这是一些用于说明的代码。

现在,我希望将前景色中定义的值用于 buttonFontIconStyle、menuItemLabelStyle(和许多其他)。是否有可能以某种方式绑定到资源中资源的值,或者有没有办法指定一次颜色(最好在 xaml 中)并在多种资源样式中使用它?

0 投票
0 回答
144 浏览

wpf - 如何从模板外部但在同一个窗口中的资源字典绑定到控件模板内的元素?

我面临的问题是 XAML 文件太大。我想把东西分成资源。

MenuItem的Header没有文本呈现,它既不使用x:Reference也不Binding.Source使用Binding.ElementName.

如果我给Header属性低于本地值,它会起作用。我需要此资源字典中可用的此上下文菜单,因为我在许多其他大型资源中使用它(尤其是DataTemplate同一资源字典中的 big s。

如果我把它ContextMenu和使用它的所有资源都Window.Resources放入ControlTemplate.Resources,一切正常,但我想将它们分开以便更好地组织,因为它们很大。

我在 Stack Overflow 上搜索了重复的问题,但没有找到与我的情况类似的问题。我想了一会儿,我没有找到对我有帮助的技术。(我只阅读了大约 80% 的 Pro WPF 4.5。)

XAML

(除了自动生成的代码之外没有任何代码隐藏)

实际: first/root 的上下文菜单有Grid一个MenuItem空的Header. 这可以通过右键单击来检查Grid

预期:它应该Header设置为“测试”。

截屏

截屏

谢谢你。

更新 1

我实际项目中的 ContextMenu 是这样开始的:

更新 2

MyContextMenu当用户右键单击MyListView. 对于 MyListView,我有 4 种 DataTemplates、GridView 和 ItemsPanelTemplate 组合,为用户提供 4 种查看信息的方式。每个 DataTemplate 都引用 MyContextMenu,因此当用户右键单击项目时会显示它。

更新 3

我的意思是“右键单击 MyListView 中的任何项目”。

0 投票
1 回答
488 浏览

c# - 当应用的 DataTemplate 没有资源键时,如何获取根元素?

我希望在 apply 中获取根元素DataTemplate。我试过这个,但它对我不起作用,因为ContentPresenter返回的MyItemsControl.ItemContainerGenerator.ContainerFromItem(vm)where vmis a ViewModel, ContentPresenter.ContentTemplateis null,虽然ContentPresenter.Content是相应的数据(相同的 ViewModel)。

我会像这里DataTemplate一样将s 作为资源访问,但我不能提供s 资源键,因为我希望它们自动应用于. 所以我必须找到一种方法从.DataTemplateItemsControlDataTemplateItemsControl

我可以使用if-else来确定DataTemplate函数中的资源,vm.GetType()但我想在没有ItemContainerGenerator和根据 MVVM 模式的情况下实现我想要的,如果可能的话,并且没有硬编码类型。

以下是我认为与代码相关的内容。例如,我使用MyAudioFileSelectorfromMainWindow将数据文件中的一些设置加载到 UI 中,但我不确定 MVVM 的执行方式是什么。

C# 来自我的实际项目

(我想目前只有一个 AudioFileSelector 和一个 ImageFileSelector,但将来我可能会有更多。)

测试示例

XAML

C# 代码隐藏

我的另一个相关问题是here

谢谢你。

更新 1

  1. 在我的实际程序中,我有更复杂DataTemplate的 s。这TextBlock只是一个例子。
  2. ContentTemplate对于特定的容器/项目/索引,我需要找到DataTemplate所使用的。我使用多个DataTemplates 根据它们自动应用DataType

更新 2

我需要DataTemplate在应用程序的设置窗口中显示不同的控件ItemsControl,每个控件DataContext都设置为每个设置类型的 ViewModel 子类型的实例,例如CheckBoxSettingDataVMAudioFileSettingDataVM。所有这些都继承自SettingDataVM.

更新 3

我不想ContentTemplate显式分配属性,我想得到它,从一个项目(ViewModel)我可以得到容器(类型ContentPresenter),并从中我可以得到DataTemplateViewModel 隐含的根元素,它可以beAudioFileSelectorImageFileSelector其他类型。我需要该ContentTemplate属性不同于,以便将来null可以存储对 theAudioFileSelector和 the以及可能其他人的引用。ImageFileSelector我将使用这些引用将应用程序打开文件中的一些设置加载到这些文件Control中。

也许我做错了什么,但我仍在学习 MVVM。我认为如果我可以设置DataTypeof ,我的问题就会得到解决DataTemplate,即使它有一个资源键,它仍然会自动应用到ItemsControl它们范围内的 s 中。

更新 4

我试图通过制定这个方案来更好地理解,我希望它有所帮助(我意识到这只是复杂的事情,但这是我的问题的一部分。):

图式