WPF复选框内容相对于复选框的垂直对齐

WPF复选框内容相对于复选框的垂直对齐,wpf,checkbox,wpf-controls,Wpf,Checkbox,Wpf Controls,我有一个复选框,其XAML标记如下: <CheckBox HorizontalContentAlignment="Stretch"> <StackPanel Orientation="Vertical"> <TextBox x:Name="editTextBox" Text="{Binding Path=Caption, Mode=TwoWay}" TextWrapping="Wrap"

我有一个复选框,其XAML标记如下:

<CheckBox HorizontalContentAlignment="Stretch">
    <StackPanel Orientation="Vertical">
        <TextBox x:Name="editTextBox" 
            Text="{Binding Path=Caption, Mode=TwoWay}"
            TextWrapping="Wrap"
            Visibility="{Binding Path=IsBeingEdited, Converter={StaticResource booleanToVisibilityConverter}}" />
        <TextBlock x:Name="itemText"
            TextWrapping="Wrap"                        
            Text="{Binding Path=Caption}" 
            Visibility="{Binding Path=IsBeingEdited, Converter={StaticResource reverseBooleanToVisibilityConverter}}">
        </TextBlock>
    </StackPanel>
</CheckBox>

这个想法是我可以在文本块(显示)和文本框(编辑)之间切换。但是,在运行应用程序时,可视复选框(可勾选方框)垂直居中。我希望它与TextBlock/TextBox的顶部对齐


我注意到,当我只包含一个文本块(因此没有StackPanel,没有TextBox)时,复选框实际上与文本块的顶部对齐,所以我假设我缺少StackPanel上的一些设置?

复选框。内容
不能让你很好地控制事物的显示方式。请尝试以下方法:

 <DockPanel VerticalAlignment="Top"> <!-- can also be center or bottom -->
    <CheckBox/>
    <Grid>
        <TextBox x:Name="editTextBox" 
            Text="{Binding Path=Caption, Mode=TwoWay}"
            TextWrapping="Wrap"
            Visibility="{Binding Path=IsBeingEdited, Converter={StaticResource booleanToVisibilityConverter}}" />
        <TextBlock x:Name="itemText"
            TextWrapping="Wrap"                        
            Text="{Binding Path=Caption}" 
            Visibility="{Binding Path=IsBeingEdited, Converter={StaticResource reverseBooleanToVisibilityConverter}}">
    </Grid>
</DockPanel>

首先,不要浪费时间进行
垂直对齐
垂直内容对齐
(甚至
控制模板
)。他们不会做你想要或可能期望的事情

BulletDecorator
(复选框和RadioButton用于呈现单选按钮/复选按钮的控件)上所述,将自动设置图标的位置。您对此没有其他控制权:

当子项出现时,项目符号始终与第一行文本对齐 对象是文本对象。如果子对象不是文本对象,则 项目符号与子对象的中心对齐

除非您更改控制模板(不必要),否则只有当内容为文本时,您才能将radio/check图标定位在顶部

因此,如果您这样做,它将看起来不好,因为无论您尝试设置多少
VerticalAlignment
属性,您都无法移动图标

<RadioButton>
    <StackPanel>
        <TextBlock Text="First line"/>
        <TextBlock Text="Something else"/>
    </StackPanel>
</RadioButton>

现在,单击内容不再更改复选框状态。糟糕的UI设计。当我将此单选按钮放置在任何面板或ContentControl中并禁用此控件(或其任何父控件)时:IsEnabled=False——那么嵌套的复选框“包括未售出的产品”和“包括其他内容”仍然处于活动状态,并且可以单击。InlineUIContainer也没有水平对齐,因此无法拉伸以使用全宽。
<RadioButton>

    <TextBlock VerticalAlignment="Top" TextWrapping="Wrap">

        <TextBlock Text="Products with &lt;" VerticalAlignment="Center" Margin="0,0,5,0"/>

        <InlineUIContainer BaselineAlignment="Center">
            <TextBox FontSize="30" Width="25" Text="10" Margin="0,0,5,0"/>          
        </InlineUIContainer>

        <TextBlock VerticalAlignment="Center" Margin="0,0,5,0">
            <Run Text="days" FontWeight="Bold"/>
            <Run Text="inventory" />
        </TextBlock>

        <LineBreak/>    

        <InlineUIContainer>
            <StackPanel>
                <CheckBox Content="Include unsold products" />
                <CheckBox Content="Include something else" />
            </StackPanel>
        </InlineUIContainer>

    </TextBlock>
</RadioButton>