WPF中checkbox左侧的文本?
将checkbox内容(文本)置于checkbox本身左侧的最简单方法是什么?
最大限度地提高“易用性”和“正确性”的解决scheme是使用LeftToRight
内容创buildRightToLeft
checkbox:
<CheckBox FlowDirection="RightToLeft"> <TextBlock FlowDirection="LeftToRight" Text="CheckBox Content:" /> </CheckBox>
或者如果你想要一个风格:
<Style TargetType="CheckBox"> <Setter Property="FlowDirection" Value="RightToLeft" /> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <ContentControl FlowDirection="LeftToRight" Content="{Binding}" /> </DataTemplate> </Setter.Value> </Setter> </Style>
在代码中:
System.Windows.Controls.CheckBox checkBox = new System.Windows.Controls.CheckBox(); checkBox.Content = ":CheckBox Enabled"; checkBox.FlowDirection = System.Windows.FlowDirection.RightToLeft;
在XAML中:
<CheckBox FlowDirection="RightToLeft" Content=":CheckBox Enabled" />
编辑
用户punker76帮助我注意到冒号“:”必须放在正确显示的文本的最前面 (“CheckBox Enabled:”),可能是由文本元素上的影响stream向引起的。 很好的接收。
另一种方法是制作一个新的自定义样式
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <SolidColorBrush Color="#F4F4F4" x:Key="CheckBoxFillNormal" /> <SolidColorBrush Color="#8E8F8F" x:Key="CheckBoxStroke" /> <Style x:Key="EmptyCheckBoxFocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle Margin="1" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeDashArray="1 2" StrokeThickness="1" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="CheckRadioFocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle Margin="14,0,0,0" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeDashArray="1 2" StrokeThickness="1" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type CheckBox}" x:Key="ContentLeftCheckBoxStyle"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> <Setter Property="Background" Value="{StaticResource CheckBoxFillNormal}" /> <Setter Property="BorderBrush" Value="{StaticResource CheckBoxStroke}" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="FocusVisualStyle" Value="{StaticResource EmptyCheckBoxFocusVisual}" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CheckBox}"> <StackPanel Orientation="Horizontal"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> <BulletDecorator Background="Transparent" SnapsToDevicePixels="true" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> <BulletDecorator.Bullet> <Microsoft_Windows_Themes:BulletChrome Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" IsChecked="{TemplateBinding IsChecked}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" /> </BulletDecorator.Bullet> </BulletDecorator> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="HasContent" Value="true"> <Setter Property="FocusVisualStyle" Value="{StaticResource CheckRadioFocusVisual}" /> <Setter Property="Padding" Value="0,0,4,0" /> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary>
用法:
<CheckBox Style="{StaticResource ContentLeftCheckBoxStyle}" Content="CheckBox:" />
希望有所帮助!
另一个解决方法,为了避免上面讨论的细微问题,在定义一个全新的CheckBox风格时使用stream向和大量代码,就是使用一个包含Label(带有所需的CheckBox内容string)和一个CheckBox(带有内容string)。
<WrapPanel> <Label Content="Checkbox content"/> <CheckBox VerticalAlignment="Center" Margin="5,0,0,0"/> </WrapPanel>
我花了两个小时,但我find了最好的决定
<Style x:Key="TextAlignLeft" TargetType="CheckBox"> <Style.Resources> <Style TargetType="Path"> <Setter Property="FlowDirection" Value="LeftToRight" /> </Style> <Style TargetType="TextBlock"> <Setter Property="FlowDirection" Value="LeftToRight" /> </Style> </Style.Resources> <Setter Property="FlowDirection" Value="RightToLeft" /> </Style>
最简单的方法是使用堆栈面板:
<StackPanel Orientation="Horizontal"> <TextBlock Text="Some Text"/> <CheckBox /> </StackPanel>
您可以编辑checkbox模板,在那里可以将文本块放在矩形的前面
我知道这是一段时间,我迟到了。 但经过几个复杂的答案,并在互联网上search了很多,我终于find了最简单的方法来实现这一点,而不扭曲从这里打勾。
<CheckBox Content="Checked" FlowDirection="RightToLeft"> <CheckBox.Resources> <Style TargetType="{x:Type Path}"> <Setter Property="FlowDirection" Value="LeftToRight" /> </Style> </CheckBox.Resources> </CheckBox>
结果: