网格失去了“拉伸” - 属性

时间:2016-09-30 19:24:05

标签: c# wpf

我正在尝试使用Grid创建ItemsControl,以确保整个空间被占用并在列之间拆分。例如,使用DataTemplates这样的事情: Simple Grid-Test

Grid-Control是我找到的唯一一个具有此属性的控件。 由于网格在动态细胞方面效果不佳,我在这里使用了答案来绑定我的模型: WPF Grid as ItemsPanel for a list dynamically bound to an ItemsControl

到目前为止,我的代码看起来像这样:

<DataTemplate x:Key="DtTaskBoardSection" DataType="{x:Type m:TaskBoardSection}">
    <uc:TaskBoardSectionControl
        AttachedTaskBoardSection="{Binding}" />
</DataTemplate>

<DataTemplate x:Key="DtTaskBoardSectionList" DataType="{x:Type m:TaskBoardSectionList}">
    <ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource DtTaskBoardSection}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid 
                    ShowGridLines="True"
                    xf:DynamicGridSizeBinding.ColumnCount="{Binding Count}" 
                    Background="LightGreen" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>

        <!--https://stackoverflow.com/questions/2432847/bind-grid-row-grid-column-inside-a-datatemplate-->
        <ItemsControl.ItemContainerStyle>
            <Style TargetType="ContentPresenter">
                <Setter Property="HorizontalAlignment" Value="Stretch" />
                <Setter Property="Grid.Column" Value="{Binding Sequence}" />
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>
</DataTemplate>

不幸的是,在真实的项目中,它现在只是像StackPanel一样堆叠控件:

Fail

浅绿色背景代表网格,但我希望我的两个测试控件只占每个地方的50%,但事实并非如此。

不幸的是,我很难深入了解ItemTemplate-Logic的内部结构,但似乎覆盖它会导致Grid不仅覆盖直接的Item-Properties,而且还会覆盖Content-Alignment的一些重要内容。 。 我想我在这里错过了Logic的一部分,你能不能给我一个提示,我错过了WPF-Templating程序的哪一部分?

1 个答案:

答案 0 :(得分:3)

您的DynamicGridSizeBinding.ColumnCount属性可能正在创建ColumnDefinitions,其宽度的GridUnitType设置为Auto,而它应该是Star

new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) };

但是,对于大小均匀的列,您不需要具有附加ColumnCount属性的Grid。最好使用单行的UniformGrid:

<ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource DtTaskBoardSection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Rows="1"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>