首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGrid ColumnHeader中的格式空白/填充

DataGrid ColumnHeader中的格式空白/填充
EN

Stack Overflow用户
提问于 2017-03-15 19:13:30
回答 2查看 5.6K关注 0票数 1

我想将画布放置在datagrid的列头中,它与colum的最左边对齐,即在列和控件之间没有边距。但是,列和控件之间总是有一些空间。我想知道我是如何摆脱图片中显示的小空间的?我也想知道为什么没有一个背景颜色(ItemsControl = LightBlue,Canvas = LemonChiffon)是可见的,但我想这是同样的原因。

所需的设计如下:

这是我的代码:

代码语言:javascript
复制
<Grid DataContext="{StaticResource vmJp}">
    <DataGrid  x:Name="dgProj" AutoGenerateColumns="False" IsReadOnly="True"  CanUserAddRows="False" Margin="10" ItemsSource="{Binding Baustellen}" BorderThickness="0" HeadersVisibility="Column" Padding="0">
        <DataGrid.Columns>
         ....

            <DataGridTemplateColumn Width="1*" x:Name="coPlanung">
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding DataContext.Monate, ElementName=dgProj}" Margin="0" VerticalAlignment="Center" Background="LightBlue">
                            <ItemsControl.ItemContainerStyle>
                                <Style TargetType="ContentPresenter">
                                    <Setter Property="Canvas.Left">
                                        <Setter.Value>
                                            <MultiBinding Converter="{StaticResource d2x}">
                                                <Binding Path="Date" Mode="OneWay" />
                                                <Binding Path="ActualWidth" ElementName="coPlanung" Mode="OneWay"/>
                                            </MultiBinding>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </ItemsControl.ItemContainerStyle>
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <Canvas Width="{Binding ActualWidth, ElementName=coPlanung}" Margin="0" Background="LemonChiffon"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <!--Monthnames-->
                                    <TextBox Text="{Binding Path=Date, StringFormat={}{0:MMM-yyyy}, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent" Margin="0">
                                        <TextBox.Width>
                                            <MultiBinding Converter="{StaticResource d2b}">
                                                <Binding Path="Date" Mode="OneWay" />
                                                <Binding Path="ActualWidth" ElementName="coPlanung" Mode="OneWay"/>
                                            </MultiBinding>
                                        </TextBox.Width>
                                    </TextBox>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>

将页边距设置为-5并不显示所需的设计:

代码

代码语言:javascript
复制
<DataGridTemplateColumn x:Name="coPlanung">
    <DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Margin" Value="-5"/>
        </Style>
    </DataGridTemplateColumn.HeaderStyle>
    <DataGridTemplateColumn.HeaderTemplate>
    ...

解决方案:ContentPresenter中的边距设置为-5

代码语言:javascript
复制
<Style TargetType="ContentPresenter">                                        
    <Setter Property="Margin" Value="-5"/>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 19:04:41

我想知道我是如何摆脱图片中显示的小空间的?

您可以将DataGridTemplateColumnDataGridTemplateColumn设置为带有负边距的DataGridColumnHeader样式:

代码语言:javascript
复制
<DataGridTemplateColumn x:Name="coPlanung">
    <DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Margin" Value="-5"/>
        </Style>
    </DataGridTemplateColumn.HeaderStyle>
    <DataGridTemplateColumn.HeaderTemplate>
    ...

我也想知道为什么没有一个背景颜色(ItemsControl = LightBlue,Canvas = LemonChiffon)是可见的,但我想这是同样的原因。

尝试为该Height指定一个Canvas。ItemsControl的背景“隐藏”在ItemsPanel后面。但是如果您需要进一步的帮助,请提供一个回购协议:https://stackoverflow.com/help/mcve

编辑:正如您已经注意到的那样,您也可以尝试设置ContentPresenterMargin

代码语言:javascript
复制
<Style TargetType="ContentPresenter">                                        
    <Setter Property="Margin" Value="-5"/>
</Style>
票数 3
EN

Stack Overflow用户

发布于 2017-03-15 20:06:10

尝试设置RowHeaderWidth="0",这是一个DataGrid属性。

//编辑可能有其他干扰。下面是要对DataGrid设计微软的WPF数据集进行样式设置的最重要属性的链接

下面是一个简短的例子

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding ViewModels}" />

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding ViewModels}"
          RowHeaderWidth="0"/>

如你所见,RowHeader已经消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42818744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档