是否可以在参考资料中定义的控件上建立一个或多个控件。这样控件就可以从基本控件继承大多数属性。类似于Style方法但由于某种原因我不能使用事件/事件集(在这种情况下为AutoGeneratingColumns
),我得到的错误是“xy-Event不是路由事件”
这是我想要完成的一个例子。 我有数据网格,其中大多数属性是相同的
<DataGrid x:Name="gridEditSystem"
AutoGeneratingColumn="onGridEditSystem_autoGeneratingColumn"
SelectionUnit="Cell"
SelectionMode="Single" CellStyle="{StaticResource GridEditStyle}">
</DataGrid>
<DataGrid x:Name="gridEditPlanets" SelectedCellsChanged="gridEditPlanets_SelectedCellsChanged"
AutoGeneratingColumn="onGridEditSystem_autoGeneratingColumn"
SelectionUnit="Cell"
SelectionMode="Single" CellStyle="{StaticResource GridEditStyle}">
</DataGrid>
我现在想要的是“基础控制”
<Window.Resources>
<DataGrid x:Key="BaseDataGrid" AutoGeneratingColumn="onGridEditSystem_autoGeneratingColumn"
SelectionMode="Single" SelectionUnit="Cell"
CellStyle="{StaticResource GridEditStyle}">
</DataGrid>
</Window.Resources>
继承控制
<DataGrid x:Name="gridEditSystem"
BasedOn/Inherits/Templates={StaticResource BaseDataGrid}
</DataGrid>
<DataGrid x:Name="gridEditPlanets"
BasedOn/Inherits/Templates={StaticResource BaseDataGrid}
</DataGrid>
我尝试了一些组合,但到目前为止失败了,我在谷歌上找不到任何东西。这在XAML中是否可行?
答案 0 :(得分:0)
你不能那样做,但是在WPF中,你可以通过多种方式解决这个问题。
您可以使用所有常用属性进行自定义网格控件,并使用它而不是常规DataGrid
控件。
public class BaseDataGrid : DataGrid
{
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// Set all you common properties here
SelectionUnit = DataGridSelectionUnit.Cell;
SelectionMode = DataGridSelectionMode.Single;
CellStyle = FindResource("GridEditStyle") as Style;
}
}
你的xaml 中的
<local:BaseDataGrid x:Name="gridEditSystem"/>
<local:BaseDataGrid x:Name="gridEditPlanets"/>
您还可以使用所有常用属性制作行为,并将其附加到您想要的DataGrid
。
public class BaseGridBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
AssociatedObject.Initialized += AssociatedObject_Initialized;
base.OnAttached();
}
void AssociatedObject_Initialized(object sender, EventArgs e)
{
// Set all you common properties here
AssociatedObject.SelectionUnit = DataGridSelectionUnit.Cell;
AssociatedObject.SelectionMode = DataGridSelectionMode.Single;
AssociatedObject.CellStyle = AssociatedObject.FindResource("GridEditStyle") as Style;
}
}
和xaml:
<DataGrid x:Name="gridEditSystem">
<i:Interaction.Behaviors>
<local:BaseGridBehavior/>
</i:Interaction.Behaviors>
</DataGrid>
<DataGrid x:Name="gridEditPlanets">
<i:Interaction.Behaviors>
<local:BaseGridBehavior/>
</i:Interaction.Behaviors>
</DataGrid>
这需要您包含并引用System.Windows.Interactivity
dll
希望这有帮助