У меня есть простая проблема, я думаю. В основном у меня есть приложение WPF
, в котором я часто использую DataGrid
control. И каждый раз, когда я делаю это по-разному (только данные, количество строк и столбцов различны). Поэтому я подумал о создании собственного элемента управления DataGridMatrix
, который бы удовлетворял мои потребности.
Код, который я написал для него, выглядит следующим образом:
<UserControl x:Class="StateMachines.UI.Controls.DataGridMatrix"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<DataGrid Width="450"
RenderTransformOrigin="0.657,1.249"
ItemsSource="{Binding Path=Logic.DefaultView}" ColumnWidth="*"
CanUserReorderColumns="False"
CanUserResizeColumns="False" CanUserAddRows="False" CanUserSortColumns="False"
CanUserResizeRows="False" Grid.ColumnSpan="1">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource MetroDataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}"
BasedOn="{StaticResource MetroDataGridRowHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource MetroDataGridCell}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Column.DisplayIndex}"
Value="0">
<Setter Property="Block.FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
</UserControl>
Итак, как вы видите, я только стилизую его, я не помещаю в него никаких данных (в XAML). Проблема в том, что я могу поместить этот элемент управления в мой MainWindow.xaml
следующим образом:
<controls:DataGridMatrix x:Name="DataGridTransition"/>
Но тогда, если я хочу, чтобы fe изменил позицию (например, в сетке, я бы хотел, чтобы она была Grid.ColumnSpan="2"
вместо Grid.ColumnSpan="1") I can't do that, cuz the
DataGrid is in my control, and my control isn't derived from
DataGrid` (я думаю, если она будет получена, то Я мог бы сделать это, как в обычных классах, верно?).
Итак, наконец, мой вопрос будет таким: есть ли способ наследовать от стандартного XAML
элемента управления в моем собственном UserControl
и просто стилизовать его по-другому (как здесь, в моем коде я бы опустил тег <DataGrid>
и Я бы поместил его аргументы в тег <UserControl>
, а другие элементы, например DataGrid.ColumnHeaderStyle
, будут расположены прямо под <UserControl>
)?