我有一个带有Deails-View的数据网格,该视图显示了另一个数据网格。通常不显示第二个网格。在行标题中,有一个带有左箭头的按钮,单击该按钮时,将显示详细信息网格,并且箭头变为向下箭头。所有这些都可以正常工作,但是行标题中只有一个“小区域”可以接受点击。这是我的RowHeader-Template的代码:
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<Button Click="DataGridRowHeader_Button_Click" Cursor="Hand" HorizontalAlignment="Center" Width="40" >
<Button.Style>
<Style TargetType="Button">
<Style.Setters>
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid >
<Border Background="Chartreuse" BorderBrush="Black" BorderThickness="5"></Border>
<Path Fill="Blue" Data="M 0,0 14,7 0,14 Z" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}},Path=DetailsVisibility}" Value="Visible">
<Setter Property="Background" Value="Salmon" />
<Setter Property="Height" Value="125" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}" >
<Grid >
<Border Background="LightCoral" BorderBrush="Black" BorderThickness="1" />
<Path Fill="Blue" Data="M 0,0 14,0 7,14 Z" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
行与
Setter属性=“高度”值=“ 125”
展开按钮
,但是按钮不适合行标题。较小的值表示按钮缩小,而较高的表示按钮则行标题不必要地扩展。
我尝试将Heigth值绑定到某些参数,例如g。
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRowDetailsEventArgs}}, Path=DetailsElement.ActualHeight}" />
(DataGridRowDetailsEventArgs在我向后看代码时会捕获正确的高度值:
private void dg_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
Trace.WriteLine(e.DetailsElement.ActualHeight);
}
)。使用
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRowDetails}}, Path=ActualHeight}" />
也不起作用,RowHeader总是扩展到一个值,该值似乎是整个Master-Datagrid的高度。
有什么想法可以正确调整按钮的尺寸吗? (很抱歉,颜色仅用于查看用户界面的不同部分。)
Hucky
答案 0 :(得分:0)
我认为您的问题出在ControlTemplate
的{{1}}内,您无法正确对齐内容(在您的情况下,您的DataGridRowHeader
)
我不是每次都用完整的Button
覆盖ContentTemplate
,而是尝试使用Xaml
(AlignmentControlTemplateExtension)的另一种方法,该方法为我做了必要的步骤(克隆并调整默认值MarkupExtension
),这样我只需要做类似的事情
ControlTemplate
要解决您的问题,您只需执行几个步骤
设置<Setter Property="Template" Value="{AlignmentControlTemplate Type={x:Type WhatEverType}}" />
DataGridRowHeader
ControlTemplate
根据需要设置<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="Template" Value="{stackoverflow:AlignmentControlTemplate Type={x:Type DataGridRowHeader}}"></Setter>
</Style>
</DataGrid.RowHeaderStyle>
和/或VerticalContentAlignment
(在您的情况下,HorizontalContentAlignment
)
VerticalContentAlignment=Stretch
您的<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>
<Setter Property="Template" Value="{stackoverflow:AlignmentControlTemplate Type={x:Type DataGridRowHeader}}"></Setter>
</Style>
</DataGrid.RowHeaderStyle>
替换
Style.Triggers
使用
<Setter Property="Height" Value="125" />
修改最终结果
<Setter Property="VerticalAlignment" Value="Stretch" />