问题标签 [controltemplate]
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.
wpf - WPF 自定义控件:模板绑定到图像
我正在创建一个 WPF 自定义控件,一个Button
带有Image
and的Text
。我在控件中添加了两个依赖属性ImagePath
和Text
,并且控件模板(在 Themes\Generic.xaml 中)是一个简单的堆栈面板,可以水平排列图像和文本。
该Text
物业运作良好。TemplateBinding
但是由于某种原因,当我使用ImagePath
依赖属性获取其路径时,我的测试项目中的示例图像没有出现。TemplateBinding
我已经通过将自定义控件中的 临时替换为图像的路径来测试图像,在这种情况下它会出现。
我希望在这方面有更多经验的人可以看看并告诉我为什么控件没有按预期工作。谢谢你的帮助。
我的 VS 2008 解决方案包含一个项目 CustomControlDemo。该项目包含一个自定义控件 TaskButton.cs 和一个用于测试该控件的主窗口 Window1.xaml。我的测试图像 calendar.png 位于项目根级别的 Resources 文件夹中,Generic.xaml 位于项目根级别的 Themes 文件夹中。
这是我的自定义控件的代码(来自 TaskButton.cs):
这是控制模板(来自 Generic.xaml):
最后,这是我用来测试控件的 Window1 标记:
任何想法为什么图像路径不起作用?再次感谢。
wpf - 基于 WPF 中的模板在运行时创建具有不同内容的 TabItem
我正在使用 WPF 编写一个应用程序,其中一部分涉及为用户管理用于配置自定义内部设备的各种文件。我需要能够在同一个 TabControl 中的选项卡中操作不同类型的配置,这意味着 TabItems 的内容必须是动态生成的。我想用 ControlTemplates 来做这件事,但我还没有成功获得一个工作模板。我在我的 Window 资源中定义了一个名为“pendantConfigurationTabItemTemplate”的 ControlTemplate,我使用以下代码将模板(其中包含我需要访问的命名项目)应用到 TabItems 并将它们添加到它们的父 TabControl :
后面的代码:
但是,每当我运行程序时,选项卡控件都不会添加任何选项卡,而是选项卡控件(似乎)被模板的内容替换或覆盖。有人可以帮我解决这个问题吗?
实际上,我想做的是使用 WPF 模板作为 TabItem 工厂
wpf - MVVM/命令和控制模板
我目前正在使用 MVVM/Commands 和 ControlTemplates。我想做的很简单。我想要一个例如 Persons 的列表,用户可以在其中触发每个人的操作。但是事件/命令处理程序不需要在人员对象上执行,例如因为我想用一个按钮从列表中删除它。
所以到目前为止我所做的是创建一个 VM,它公开了一个 PersonVM 列表,并且每个都包含我的 person 对象。然后我创建了一个带有控件模板的 CustomControl,其中包含一个显示我的人员的 ItemsControl。
所有数据都显示得很好,完全没有问题。
然后我尝试添加允许用户从列表中删除人员的部分。所以我在数据模板中添加了一个按钮。仍然不是问题。
下一步是公开一个由按钮触发的命令。
第一种方法是使用 Josh Smiths RelayCommand。所以我将其中一个添加到 PersonViewModel 并将其绑定到按钮。它有效,但问题是我需要引发父虚拟机必须处理的事件(在执行命令之后)。恕我直言,这不好,因为随着越来越多的命令,代码对我来说似乎很乱。
因此,我重新设计了所有内容以使用 RoutedCommand,并尝试在控件层次结构的更高级别上添加 CommandBinding。但这是不可能的,因为 ControlTemplate 不允许我在视图模型上调用方法。
所以我想知道解决这个问题的正确方法是什么?不知何故,我相信我走错了路,但我不知道在哪里。
蒂亚·马丁
wpf - WPF:为什么我不应该在 ControlTemplate 中使用 {TemplateBinding Margin} - Margin 是否仅适用于元素的容器?
我为 Button 创建了自己的 ControlTemplate,如下所示:
现在,我注意到当我为按钮设置边距时,例如:
该按钮实际上有双 Margin - 40。我假设控件实际上应该从不使用 Margin,并且 Margin 属性在排列阶段仅由按钮的祖先读取。然后我查看了 WPF 默认样式,发现没有一个使用 Margin。
这是正确的结论(Margin 只能由容器正确排列)吗?换句话说,每次我在我的风格中使用 {TemplateBinding Margin} 时,我会得到双倍边距吗?是否有一些我的控件不应该使用的类似属性列表(因为它们仅适用于“周围世界”)?
你能把我指向解释这一点的 MSDN 页面吗?谢谢!
编辑:
我想我应该在http://msdn.microsoft.com/en-us/library/ms745058.aspx和http://msdn.microsoft.com/en-us/library/ms751709.aspx中找到答案,但我没有'不认为他们明确提到使用 Margin 属性的从来不是控件,它始终是祖先或 wpf 系统评估它并使用它来影响布局......
silverlight - 以编程方式访问 ResourceDictionary 项
我有一个名为“MySilverlightControls”的 Silverlight 控件程序集。几个文件夹进入该程序集我有一个类,它扩展了第三方供应商的网格列,我们称之为“MyImageColumn.cs”。
我还创建了一个名为 的资源字典Generic.xaml
,它位于Themes
程序集的文件夹中。在该资源字典中,我定义了一个名为MyImageColumnTemplate的 ControlTemplate :
我的问题是:从 MyImageColumn 中,如何以编程方式引用/加载此控件模板,以便将其分配给列上的属性?我希望使用与此类似的语法:
但这总是返回 null。当我在 Reflector 中加载程序集时,我看到Generic.xaml
文件在那里,资源的名称是MySilverlightControls.g.resources
,其中的路径是themes/generic.xaml
.
我究竟如何才能找到此资源字典中的各个项目?
wpf - 如何继承控件模板
我在一个 WPF 项目中工作,在该项目中我CheckBox
为一些特殊操作覆盖了控件。那工作正常。
我的问题是ControlTemplate
从主题(来自codeplex的shinyred.xaml)应用的那个没有应用于我的覆盖控件。有没有办法继承CheckBox
ControlTemplate
供我的新控件使用?
CheckBox
我能找到的所有样本都集中在继承ControlTemplate
.
silverlight - 如何在 Silverlight 3 中在运行时替换 ControlTemplate 部件?
我正在编写一个自定义控件,它使用在我的 XAML 的资源部分中定义的模板,并且我想在运行时替换我的控件实例中的一个或多个模板部分。
例如,如果我在控件的模板中有一个名为“ActivePart”的部件,如何将控件实例中的 ActivePart 的 FrameworkElement 替换为新的 FrameworkElement?
我意识到 Control.Template 属性是可写的,但我更愿意找到一种方法来替换该模板的特定部分而不是创建一个全新的部分,尽管通过替换适当的命名部分来编辑现有模板的解决方案会可以接受。
我正在使用 C#,需要在运行时使用任何 FrameworkElement 执行此操作,因此我不是在寻找基于 XAML 的解决方案或建议,谢谢!
PS 我知道 GetTemplateChild() 返回控件实例中命名模板部分的 FrameworkElement,但我不明白这如何帮助我用新的 FrameworkElement 替换该部分。
wpf - WPF 覆盖设置器属性
我在我的 XAML 中使用一种样式作为标签:
我看到的问题是“retreatText”的 FontSize 属性没有被设置器值 30 覆盖。这构建得很好,但最终显示的“retreatText”大小为 30。为什么这个值没有被覆盖?
提前致谢。
wpf - 使用控件模板中的按钮清除 wpf 列表框选择并且没有代码隐藏
我想Style
为 WPF创建一个ListBox
,其中包含一个用户可以单击的,它会清除Button
选择。我不想使用代码隐藏,以便可以将其应用于任何. 我尝试过使用s 和s ,但事实证明这是有问题的,因为它只在第一次工作并停止了之前的选择。我知道我可以使用用户控件,但我想知道是否可以仅使用.ControlTemplate
ListBox
Style
ListBox
EventTrigger
Storyboard
Storyboard
Style
c# - ControlTemplate.Triggers 中的 TemplatedParent 绑定
当其文本为空时,我正在尝试使用 ControlTemplate 中的触发器将自定义控件的背景设置为可视画笔。下面显示相关代码:
但是,当文本为空时,不会应用视觉画笔。但是,如果我在代码中创建可视画笔并将其作为依赖属性公开,则以下代码确实有效:
不过,我宁愿在 XAML 中定义画笔。为什么第二个绑定可以正常工作,但第一个不能正常工作?