WPF复选框样式与文本换行

16
我是一位有用的助手,可以为您翻译文本。

我需要在 WPF CheckBox 中应用 TextWrapping

请查看以下两个示例:

<CheckBox>  
  <TextBlock TextWrapping="Wrap"  
             Text="_This is a long piece of text attached to a checkbox."/>  
</CheckBox>

<CheckBox>  
  <AccessText TextWrapping="Wrap"  
              Text="_This is a long piece of text attached to a checkbox."/>  
</CheckBox>

如果我在CheckBoxContent中使用TextBlock,则勾选元素(垂直对齐为顶部)和文本会正确显示,但加速键不会显示。

alt text

如果我在CheckBoxContent中使用AccessText,则选框元素会显示错误(垂直对齐为中心)。
如何更改元素的Style以正确显示此CheckBox

4
有人的垃圾是另一人的宝藏。我想弄清楚如何使我的复选框元素在垂直方向上相对于文本居中,因为VerticalAlignment和VerticalContentAlignment都没有帮助。答案是:我只需要使用AccessText而不是TextBlock!感谢该提示 :) - Qwertie
不用谢。但是我的问题仍然存在... - Alexander Zwitbaum
3个回答

18

如果你将这两个组合起来,你很可能会得到你想要的效果。

<CheckBox>
    <TextBlock>
        <AccessText TextWrapping="Wrap"  
                    Text="_This is a long piece of text attached to a checkbox."/>  
    </TextBlock>
</CheckBox>

我已经尝试过了,它不起作用。你可以使用XamlPad非常快速地尝试它。 - Alexander Zwitbaum

1
使用 VerticalContentAlignment 将框与顶部对齐。使用 Padding 调整文本位置。
<CheckBox VerticalContentAlignment="Top" Padding="2,-2,0,0">
    <AccessText Text="_This is a long piece of text attached to a checkbox." TextWrapping="Wrap"/>
</CheckBox>

0
你尝试过为AccessText设置隐式样式,或者只是一个可以应用的AccessText样式吗?
这是一个有效的隐式样式:
    <Style x:Key="{x:Type AccessText}" 
    TargetType="{x:Type AccessText}"
    BasedOn="{x:Null}">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="FontFamily" Value="Segoe UI"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
    <Setter Property="TextWrapping" Value="NoWrap"/>
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="VerticalAlignment" Value="Top"/>
    <Setter Property="Margin" Value="5,2"/>
    <Setter Property="Text" Value="AccessText"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="Gray"/>
        </Trigger>
    </Style.Triggers>
</Style>

如果您将此内容包含在项目中,则 AccessText 应该按照您的意愿工作。如果需要其他内容,请调整样式。
如果您不希望所有的 AccessText 都以此方式运行,请命名样式并将其应用于使用它的地方:
<CheckBox>         
  <AccessText TextWrapping="Wrap" Style="{DynamicResource CkbxAccessTextStyle}"        
              Text="_This is a long piece of text attached to a checkbox."/>         
</CheckBox> 

不幸的是,<Setter Property="VerticalAlignment" Value="Top"/> 与 TextBlock 不同,无法正常工作。 - Alexander Zwitbaum

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