gpt4 book ai didi

wpf - ControlTemplate 的设计时数据

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

使用 d:DataContext 可以轻松地为 DataContext 提供设计时数据但是用 {TemplateBinding} 引用的控件属性呢?或 {RelativeSource TemplatedParent}来自 Style.Template ?

DesignerProperties.GetIsInDesignMode(this) 时,我是否应该在构造函数/Loaded 事件中使用示例数据填充控件?返回真?
(不能这样做,因为它会破坏正常的设计体验)。

我无法修改的第三方控件呢?

最佳答案

对于我自己的控件,我通常会执行以下操作:

<Style x:Key="FooStyle>
<Setter Property="Template>
<Setter.Value>
<ControlTemplate TargetType="FooControl">
<Grid d:DataContext="{d:DesignInstance FooDesignTimeData, IsDesignTimeCreatable=True}">
... guts of control template go here ...
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

其中“FooDesignTimeData”是一个以适当形式提供设计时数据的类(从运行时 View 模型实现接口(interface)是一个很好的做法)。

我不明白为什么这也不适用于第 3 方控制。您甚至可能不必重新模板化控件——您可以通过在样式中指定第 3 方控件并为其提供上面指定的设计时数据上下文来摆脱困境,但我没有尝试过这种情况。我假设您会遇到所有这些麻烦,因为您被迫使用没有出色设计时体验的控件(例如通过提供 Vendor.Controls.Design.dll 或 Vendor.Controls.Expression.Design。 dll 文件)。

要使用 TemplateBindings,我没有很好的解决方案。通常我会创建一个测试页面来显示我的控件并允许我切换模板。在集成期间,您将有一个额外的 View (在您的应用程序中或作为一个单独的应用程序),允许您根据需要创建和操作控件的实例。 Blend SDK 中的 GoToStateAction 目标触发操作在这里通常很有用。例如,为每个视觉状态创建一个按钮,然后使用 Click 甚至触发到特定状态的转换。因此,您可以在绑定(bind)到测试数据的同时轻松测试所有状态以及转换。哈克并且不是真正的设计时数据,但它确实有效。

关于wpf - ControlTemplate 的设计时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739037/

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