use*_*570 5 wpf xaml grid-layout
我对 wpf 非常陌生,并且在列标题中的某些格式设置方面遇到问题。我想要一个带有标题的文本块,以及标题中的一个按钮,该按钮最终将成为过滤器功能。到目前为止我所写的:
<DataGrid ItemsSource="{Binding diagrams}" SelectedItem="{Binding selectedDiagram, Mode=TwoWay}" AutoGenerateColumns="False" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,25,0,0" Height="450" Width="746">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Binding="{Binding iD}">
<DataGridTextColumn.Header>
<Grid> # <--Problems in here
<Grid.ColumnDefinitions> #
<ColumnDefinition/> #
<ColumnDefinition/> #
</Grid.ColumnDefinitions> #
<TextBlock Text="ID" HorizontalAlignment="Left" Grid.Column="0"/>
<Button Content="^" HorizontalAlignment="Right" Grid.Column="1"/>
</Grid>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Header="Description" Width="Auto" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Binding="{Binding description}"/>
<DataGridTextColumn Header="Date Changed" Width="Auto" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Binding="{Binding dateChanged}"/>
<DataGridTextColumn Header="Created By" Width="Auto" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Binding="{Binding createdBy}"/>
<DataGridTextColumn Header="Type" Width="Auto" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Binding="{Binding type}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
最终网格只占用所需的最小空间,并且标题和按钮直接并排。正如您可能从我在文本块和按钮中的对齐方式猜到的那样,我希望它们位于列标题的相对两侧,或者至少稍微分开。
我意识到网格不能是星形大小来填充可用空间,堆栈面板或停靠面板也不能(我的直觉告诉我,我的想法有根本性的错误,但我又是一个完全的新手)
我无法真正规定标题或网格的标准大小,因为填充列的文本长度可能会有很大变化,尽管我尽了最大努力,我仍然找不到一种方法来强制网格填充空白空间。有人可以帮忙吗?最好使用小词?
我有一个稍微改进的答案,这帮助了我并且更简单/更干净。
在列上,设置 HeaderStyle... 对于您的示例,如下所示:
<DataGridTextColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</DataGridTextColumn.HeaderStyle>
Run Code Online (Sandbox Code Playgroud)
无需模板,它会拉伸以填充。
您是否尝试过通过添加一个中间列来处理调整大小,从而使用网格进行布局?
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)
然后将文本块放置在第 0 列中,将按钮放置在第 2 列中
编辑:虽然我很欣赏这可能行不通,因为我对 DataGrids 有各种乐趣并尝试调整列的大小......