Was ist der einfachste Weg, Checkbox-Inhalt (Text) auf der linken Seite des Kontrollkästchens selbst zu setzen?Text auf der linken Seite des Kontrollkästchens in WPF?
Antwort
Eine Lösung, die „Leichtigkeit“ und „Richtigkeit“ ist, um eine RightToLeft
Checkbox mit LeftToRight
Inhalt maximiert:
<CheckBox FlowDirection="RightToLeft">
<TextBlock FlowDirection="LeftToRight" Text="CheckBox Content:" />
</CheckBox>
Oder wenn Sie einen Stil mögen:
<Style TargetType="CheckBox">
<Setter Property="FlowDirection" Value="RightToLeft" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl FlowDirection="LeftToRight" Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
In Code:
System.Windows.Controls.CheckBox checkBox = new System.Windows.Controls.CheckBox();
checkBox.Content = ":CheckBox Enabled";
checkBox.FlowDirection = System.Windows.FlowDirection.RightToLeft;
In XAML:
<CheckBox FlowDirection="RightToLeft" Content=":CheckBox Enabled" />
EDIT
Benutzer punker76 mir geholfen, dass Doppelpunkt bemerken ":" hat Orte sein infront Der Text wird am Ende korrekt angezeigt ("CheckBox Enabled:"), wahrscheinlich durch eine Affektflussrichtung auf das Textelement zurückzuführen. Netter Fang.
Es gibt ein Problem mit diesem: Ihre tick Zeichen wird horizontal gespiegelt, zumindest, wenn es als Hub-Array implementiert. Dies geschieht, weil alle Komponenten, aus denen die CheckBox besteht, die FlowDirection-Eigenschaft erben. Die Lösung wird hier erklärt: [Link] (http://stackoverflow.com/questions/20911471/wpf-button-icon-gets-mirrored-why/20912496#20912496) –
@ punker76 Das gleiche Problem verursacht die ": ABC "als" ABC: "angezeigt werden. Wenn Sie die FlowDirection von ContentPresenter auf LeftToRight festlegen, wird der Text wie erwartet für Skripts von links nach rechts angezeigt. –
Eine andere Möglichkeit ist eine neue benutzerdefinierte Stil
<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>
Nutzung zu machen:
<CheckBox Style="{StaticResource ContentLeftCheckBoxStyle}" Content="CheckBox:" />
Hoffnung, das hilft!
Ich denke, wir waren uns alle dieser Antwort bewusst und wir wissen, dass es der richtige Weg ist, um dieses Problem zu lösen, aber "der einfachste" Weg ist, nur die Fließrichtung zu ändern. :) –
@LepiPerke ok, mit dem ":" auf der linken Seite ist es in Ordnung :-) – punker76
Diese Antwort sollte wirklich als richtig markiert werden. Es macht alles richtig und hat keine Probleme mit umgedrehten Häkchen und umgekehrtem Text. Die Antwort, die die Verwendung von FlowDirection befürwortet, funktioniert nicht einheitlich für die Zeichenreihenfolge und nicht symmetrische Häkchen. –
Sie können das Kontrollkästchen Vorlage bearbeiten und über können dort platzieren Sie den Textblock vor dem Rechteck
eine andere Lösung, die subtilen Probleme di zu vermeiden Bei der Definition eines völlig neuen CheckBox-Stils oben mit Flussrichtung und der großen Menge an Code, verwenden Sie einfach ein WrapPanel, das ein Label (mit der gewünschten CheckBox-Inhaltszeichenfolge) und ein CheckBox (ohne Inhaltszeichenfolge) enthält.
<WrapPanel>
<Label Content="Checkbox content"/>
<CheckBox VerticalAlignment="Center" Margin="5,0,0,0"/>
</WrapPanel>
einfachste Weg ist, um einen Stapel Panel zu verwenden:
<StackPanel Orientation="Horizontal">
<TextBlock Text="Some Text"/>
<CheckBox />
</StackPanel>
ich denke, das ist in Ordnung, wenn es Ihnen nichts ausmacht, die Fähigkeit zu verlieren, zu überprüfen/deaktivieren, wenn Sie auf den Text klicken – failedprogramming
Event-Handler können damit umgehen – simonalexander2005
ich zwei Stunden dafür ausgegeben, aber ich fand die beste Entscheidung
<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>
Ich weiß, es ist schon eine Weile und Ich bin spät. Aber nachdem ich mehrere komplizierte Antworten durchgegangen und viel im Internet gesucht habe, fand ich schließlich den einfachsten Weg, dies zu erreichen, ohne den Tick von here zu verzerren.
<CheckBox Content="Checked" FlowDirection="RightToLeft">
<CheckBox.Resources>
<Style TargetType="{x:Type Path}">
<Setter Property="FlowDirection" Value="LeftToRight" />
</Style>
</CheckBox.Resources>
</CheckBox>
Ergebnis:
- 1. Ausrichten von Text auf der linken Seite des Kontrollkästchens in Windows.Forms
- 2. WPF-Menü wird auf der linken Seite des Fensters angezeigt
- 3. Gedrehten Text an der linken Seite des Canvas ausrichten
- 4. WPF ToolBar: wie Griff entfernen (Punkte auf der linken Seite)
- 5. Text-Ausrichtung Text auf der linken Seite nach rechts und Text auf der rechten Seite nach links
- 6. Wie Glyphon auf der linken Seite des Textfelds
- 7. Haben Sie Probleme, Text auf der linken Seite zu bleiben
- 8. Einige Text auf der linken Seite, einige Text auf der rechten Seite, in einer einzigen Zeile, mit BASH
- 9. MeasureString() puffert den Text auf der linken und rechten Seite
- 10. Anreden des unbestimmten Status eines WPF-Kontrollkästchens
- 11. UITextField Text nicht auf der linken Seite scrollen off
- 12. Text Überlauf mit drei Punkten auf der linken Seite
- 13. NSIS - Verknüpfung auf der linken Seite des Startmenüs
- 14. Python mehrere Variablen auf der linken Seite des Zuweisungsoperators
- 15. iPad: Gestenerkennung auf der linken/rechten Seite des Bildschirms
- 16. Bootstrap Navbar Markenbild auf der linken Seite des Jumbotron
- 17. Name des ausgewählten Kontrollkästchens
- 18. Javascript Objekt Klammernotation ({Navigation} =) auf der linken Seite des assign
- 19. IntelliJ - Zeige Fehler/Warnung auf der linken Seite des Codes
- 20. Box-Shadow nur auf der linken Seite des Elements
- 21. Display ListPopupWindow auf der linken Seite des Bildschirms
- 22. CSS Styling Füllraum Links in der linken Seite des Elements und der rechten Seite des Elements
- 23. NSTextField Padding auf der linken Seite
- 24. Wie Gruppe Komponenten auf der linken Seite
- 25. WPF Kontextmenü auf der linken Maustaste
- 26. JTabbedPane: Symbol auf der linken Seite der Registerkarten
- 27. XAML: Vertikale CommandBar (auf der linken Seite)
- 28. Symbol auf der linken Seite der Bootstrap-Warnung
- 29. Emacs: TODO-Anzeige auf der linken Seite
- 30. Graphviz: Label auf der linken Seite
Ich muss sagen, ja, das ist wirklich einfach ... – punker76
Aus welchem Grund auch immer das Häkchen-Symbol (* Hinweis: * .NET 4.5), die diese Lösung nutzlos macht. Am besten wäre es, eine Kopie des ursprünglichen Stils zu bearbeiten und die Vorlage anzupassen, um damit umzugehen. – erodewald
Da einige Leute vielleicht nicht wissen, wie man eine Kopie des Standard-CheckBox-Stils bekommt, habe ich beschlossen, meine Implementierung (die angehängte Eigenschaften nutzt) auf [a gist] zu setzen (https://gist.github.com)/gen3ric/be2aa4a6d2d82739b835), die den ** full ** 'CheckBox'-Stil mit einigen kleineren Änderungen an den' ControlTemplate.Triggers' beinhaltet. – erodewald