如何在WPF中正确对齐RadioButton

时间:2012-03-18 07:08:49

标签: c# .net wpf xaml layout

尝试本教程 http://www.wpftutorial.net/ListBoxDataTemplate.html

并考虑添加一个单选按钮如下

   <ListBox Margin="10" ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="60"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="20"/>
                    </Grid.ColumnDefinitions>
                    <Border Grid.Column="0" Margin="5" BorderBrush="Black" BorderThickness="1">
                        <Image Source="{Binding Path=Image}" Stretch="Fill" Width="50" Height="50" />
                    </Border>
                    <StackPanel Grid.Column="1" Margin="5" >
                        <StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold" >
                            <TextBlock Text="{Binding Path=Some1}" />
                            <TextBlock Text="{Binding Path=Firstname, FallbackValue=FirstName}" />
                            <TextBlock Text="{Binding Path=Lastname, FallbackValue=LastName}" Padding="3,0,0,0"/>
                        </StackPanel>
                        <TextBlock Text="{Binding Path=Age, FallbackValue=Age}" />
                        <TextBlock Text="{Binding Path=Role, FallbackValue=Role}" />
                    </StackPanel>

                    <RadioButton Grid.Column="2" Margin="5" HorizontalAlignment="Right" GroupName="A1"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

但结果输出是

enter image description here

将单选按钮对齐到列表框边缘旁边的任何帮助?感谢

3 个答案:

答案 0 :(得分:3)

您需要在DataTemplate内对齐网格的宽度。您可以使用SharedSizeGroup执行此操作,有关详细信息,请参阅此问题:

How can I make a column in a listbox in WPF the same width for all items?

答案 1 :(得分:3)

首先你需要get the template content to stretch,然后你可以创建一个内容在右边对齐的内容。

答案 2 :(得分:0)

向@ColinE答案添加更多详细信息...

使用SharedSizeGroup。

<ListBox ... Grid.IsSharedSizeScope="True">
   ...
   <Grid.ColumnDefinitions>
       <ColumnDefinition Width="60"/>
       <ColumnDefinition SharedSizeGroup="secondColumn" />
       <ColumnDefinition Width="20"/>
   </Grid.ColumnDefinitions>

   ...
</ListBox>

这将告诉WPF同步所有网格的第二列(从技术上讲,宽度为'自动',但所有网格的宽度都相同)。

另一种选择是使用ListView,并定义列。