代码之家  ›  专栏  ›  技术社区  ›  Fyodor Soikin

对齐控件的大小

  •  0
  • Fyodor Soikin  · 技术社区  · 14 年前

    简化的问题。

    我有两个 ItemsControl 一个在另一个之下并且绑定到同一序列的:

    [Control] [Another Control] [More Controls]
    [Other Ctrl] [Super Control] [Control]
    

    [Control   ] [Another Control] [More Controls]
    [Other Ctrl] [Super Control  ] [Control      ]
    

    “单向”也是可以接受的:使底部的项目和顶部的项目大小相同,即使它们较短:

    [Control] [Another Control] [More Controls]
    [Other C] [Super Control  ] [Control      ]
    

    一些注意事项:

    1. 是的,他们 分开 ItemControl s。
    2. 不,我不能用 Grid DataGrid .

    更完整的解释可以参考我的 other question

    更新:为什么它们必须在不同的ItemControls中
    一般来说,我要实现的是构建一个绑定到矩形数据结构的表。除了使用嵌套 项目控制 学生:一个 对于行,每个项都包含另一个 项目控制 那一行的单元格。反之亦然:一个用于列,每个项包含该列中的单元格。无论哪种方式,嵌套项都必须彼此对齐。
    我确实意识到,可能还有其他方法来创建这样一个我看不到的表。所以我也问 .

    谢谢你,哦,全能的社区,提前。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Goblin    14 年前

    请尝试以下操作:

     <StackPanel Grid.IsSharedSizeScope="True">
        <StackPanel.Resources>
            <DataTemplate x:Key="SharedSizeTemplate">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="SharedSize"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding}"/>
                </Grid>
            </DataTemplate>
        </StackPanel.Resources>
        <ItemsControl ItemTemplate="{StaticResource SharedSizeTemplate}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <System:String>One</System:String>
            <System:String>Longer</System:String>
            <System:String>Longest</System:String>
            <System:String>Very Longest</System:String>
        </ItemsControl>
        <ItemsControl ItemTemplate="{StaticResource SharedSizeTemplate}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <System:String>Short</System:String>
            <System:String>S</System:String>
            <System:String>Even longer than above</System:String>
            <System:String>V</System:String>
        </ItemsControl>
    </StackPanel>
    

    编辑:仍然有一个问题,尽管-所有列的大小将相同的最佳宽度-不知道你是否可以接受?

        2
  •  0
  •   Moonus    10 年前

    最近我也遇到了类似的问题,最后我使用dockpanel对datatemplate进行了简单的破解,如下所示:

    <DockPanel VerticalAlignment="Center" HorizontalAlignment="Stretch" LastChildFill="True">
        <TextBox DockPanel.Dock="Right" Width="40" Text="{Binding CurrentValue}"></TextBox>
        <Slider DockPanel.Dock="Right" Width="60" ...></Slider>
        <TextBlock DockPanel.Dock="Right" Text="{Binding Header}"></TextBlock>
    </DockPanel>
    

    如果可以决定控件的大部分宽度,或者在必要时创建嵌套的滚动视图,则可以使用此方法。