gpt4 book ai didi

c# - 在 Silverlight 中重用自定义样式

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:47 25 4
gpt4 key购买 nike

通过修改 RowStyleDataGrid我创建了一个自定义网格,当鼠标悬停在该行上方时,该网格将在该行的末尾显示一些按钮:

Custom DataGrid

我为 DataGridRow 创建了一个新样式基于默认样式。然后我修改了 XAML 以在 StackPanel 中添加我的按钮(细节省略):

<UserControl.Resources>
<Style x:Key="DataGridRowStyle" TargetType="swcd:DataGridRow">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="swcd:DataGridRow">
...
<StackPanel x:Name="RowControlsPanel">
<Button>
... these are the buttons displayed on the row

DataGrid使用样式修改:

<swcd:DataGrid RowStyle="{StaticResource DataGridRowStyle}">
...
</swcd:DataGrid>

我想以类似的方式创建另一个网格,但在行的末尾使用一组不同的按钮。我可以创建我的样式的文本副本并相应地修改它,但我希望我可以创建一个适当的可重用类。我不确定如何处理这个问题,因为我想从我的样式中提取出来的东西是样式中的控件(按钮)集合。

到目前为止,我的方法是创建一个 MyDataGrid派生自 DataGrid 的类.我添加了一个新属性 RowControlsMyDataGrid使我能够像这样实例化它:

<local:MyDataGrid>
<local:MyDataGrid.RowControls>
<Button>
... these controls should go at the end of the row
</local:MyDataGrid.RowControls>
...
</local:MyDataGrid>

MyDataGrid使用 RowStyle如上所述。但是MyDataGrid.RowControls的内容怎么办?收藏进ContentRowControlsPanel在风格?我想我应该在 OnApplyTemplate 中这样做的 DataGridRow ,但是我需要派生一个新的 MyDataGridRow来自 DataGridRow 的类(class).不幸的是 DataGrid被硬编码为使用 DataGridRow而且我无法注入(inject)自己的派生行类。我觉得我需要以不同的方式解决我的重用问题,但我不确定该怎么做?

通过添加新属性和修改控件模板来自定义像按钮这样的简单控件非常容易,但是如何自定义像 DataGrid 这样的复杂控件?我需要自定义的模板嵌套在网格中的什么位置?

最佳答案

您可以考虑使用 Silverlight 3 BasedOn 样式重用您的样式,而不是创建可重用的类:

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/03/18/Silverlight-3-1320-BasedOn-Styles.aspx

该技术将允许您进行微小的修改,例如将示例中的行按钮更改为现有样式。

关于c# - 在 Silverlight 中重用自定义样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299887/

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