垂直对齐WPF RadioButton项目符号并拉伸其内容

时间:2012-10-17 17:06:15

标签: wpf radio-button alignment

我想使用一个横跨整个可用区域的网格作为RadioButton的内容,我希望RadioButton的项目符号垂直对齐。

让网格在整个区域内伸展很容易,我只需在RadioButton上设置Horizo​​ntalContentAlignment属性:

<RadioButton HorizontalContentAlignment="Stretch">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock>Foo</TextBlock>
        <TextBox Grid.Column="1"/>
        <TextBlock Grid.Row="1">The quick brown fox</TextBlock>
        <TextBox Grid.Row="1" Grid.Column="1"/>
    </Grid>
</RadioButton>

根据Simon Weaver对此older question的回答,我可以相对轻松地垂直对齐单选按钮的子弹:

<RadioButton HorizontalContentAlignment="Stretch">
    <TextBlock Grid.IsSharedSizeScope="True">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock>Foo</TextBlock>
            <TextBox Grid.Column="1"/>
        </Grid>
        <LineBreak/>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Row="1">The quick brown fox</TextBlock>
            <TextBox Grid.Row="1" Grid.Column="1"/>
        </Grid>
    </TextBlock>
</RadioButton>

麻烦的是,完成后,内容不再延伸。 one or the other

如何获得垂直对齐的子弹拉伸网格?

2 个答案:

答案 0 :(得分:2)

正在正确拉伸TextBlock,但其中的网格不是。据推测,这就是TextBlock的工作方式。

以下是有点hacky,但它的工作原理:

<RadioButton HorizontalContentAlignment="Stretch">
    <TextBlock Name="Text" Grid.IsSharedSizeScope="True">
        <Grid Width="{Binding ElementName=Text, Path=ActualWidth}">

答案 1 :(得分:1)

这对视觉效果起作用。你没有列出任何功能要求,所以我不确定它是否适用于你没有事件映射。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <RadioButton Grid.Column="0" Grid.RowSpan="2" Content=""/>
    <TextBlock Grid.Column="1">Foo</TextBlock>
    <TextBox Grid.Column="2"/>
    <TextBlock Grid.Row="1" Grid.Column="1">The quick brown fox</TextBlock>
    <TextBox Grid.Row="1" Grid.Column="2"/>
</Grid>

enter image description here