将复选框内容(文本)放在复选框本身左侧的最简单方法是什么?
代码:
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" />
剪辑
用户 朋克76帮助我注意到冒号“ :”必须是正确显示文本的位置 在前面,在结尾(“ CheckBox Enable:”) ,可能是由于文本元素上的影响流方向造成的。接得好。
另一种方法是创建一个新的定制样式
<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:" />
希望能帮上忙!
您可以编辑复选框模板,在那里可以将文本块放在矩形的前面
最大化“简单性”和“正确性”的解决方案是使用 LeftToRight内容创建一个 RightToLeft复选框:
LeftToRight
RightToLeft
<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>
另一个解决方案是,为了避免上面讨论的流方向和定义一个全新的 CheckBox 样式时的大量代码的微妙问题,只使用包含一个 Label (带有所需的 CheckBox 内容字符串)和一个 CheckBox (没有内容字符串)的 WrapPanel。
<WrapPanel> <Label Content="Checkbox content"/> <CheckBox VerticalAlignment="Center" Margin="5,0,0,0"/> </WrapPanel>
最简单的方法是使用堆栈面板:
<StackPanel Orientation="Horizontal"> <TextBlock Text="Some Text"/> <CheckBox /> </StackPanel>
我花了两个小时,但我找到了最好的决定
<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>
我知道已经有一段时间了,我迟到了。但是,经过几个复杂的答案,并在互联网上搜索了很多,我终于找到了最简单的方法来实现这一点,而不扭曲的滴答从 给你。
<CheckBox Content="Checked" FlowDirection="RightToLeft"> <CheckBox.Resources> <Style TargetType="{x:Type Path}"> <Setter Property="FlowDirection" Value="LeftToRight" /> </Style> </CheckBox.Resources> </CheckBox>
结果: