WPF,数据模板宽度

3

我有一个数据模板,在一个ListBox中格式化项目。

<DataTemplate x:Key="ChildViewModelTemplate">
    <Border BorderBrush="#FFDC1C1C" BorderThickness="1" >
        <Grid>
            <TextBlock Text="{Binding Path=DisplayName}"></TextBlock>
            <Image Height="Auto" Margin="0,0,2,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="31" Source="pack://siteoforigin:,,,/rocket.ico"/>
        </Grid>
    </Border>                
</DataTemplate>

这会在每个项目周围放置一个边框,延伸到 TextBlock 绑定中绑定的文本字符串的长度。
有没有一种简单的方法使所有元素具有相同的宽度,其中宽度等于最长元素?对于额外的奖励分数,我想知道是否有一种方法可以针对最长可见元素和/或无论是否可见的最长元素进行操作。
谢谢。
2个回答

3

跟进Botz3000的回答。SharedSizeGroup是解决这个问题的方法。这样做就可以了。

<ListBox ...
         Grid.IsSharedSizeScope="True">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/>
                </Grid.ColumnDefinitions>
                <Border BorderBrush="#FFDC1C1C" BorderThickness="1" >
                    <Grid>
                        <TextBlock Text="{Binding Path=DisplayName}"></TextBlock>
                        <Image Height="Auto" Margin="0,0,2,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="31" Source="C:\C1.png"/>
                    </Grid>
                </Border>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

2
太棒了!这就是我迄今为止喜欢WPF的原因,感觉设计师们已经想到了我能想到的一切,并提供了解决方案。这个教程非常好,让我对RelativeSource有了一些了解,这也是我接下来打算研究的内容 :) - Ian


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接