Ich versuche, eine Textausrichtung auf ein ContentControl anzuwenden. Da das ContentControl keine horizontale oder vertikale Textausrichtungseigenschaft wie der TextBlock hat, versuche ich die HorizontalContentAlignment-Eigenschaft des ContentControls zu verwenden.Ausrichten von Text mit einem ContentControl mithilfe der HorizontalContentAlignment-Eigenschaft
Mein Problem ist, dass ich es nicht mit einem ContentControl selbst arbeiten kann.
In meinem Beispiel habe ich eine Inhaltskontrolle, die "Hallo Welt" anzeigt und eine Schaltfläche, die "es ändern" anzeigt.
Wenn ich auf die Schaltfläche klicke, setze ich die HorizontalContentAlignment auf das Inhaltssteuerelement und auf die Schaltfläche. Der Inhalt der Schaltfläche ändert sich, der Inhalt des Inhaltssteuerelements jedoch nicht.
Hier ist meine XAML-Code:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ContentControl x:Name="ctrl" Width="525">
Hello World!
</ContentControl>
<Button x:Name="btn" Grid.Row="1" Content="Change It" Click="btn_Click"/>
</Grid>
</Window>
Und hier ist mein VB.NET-Code für die Schaltfläche klicken Ereignis:
Class MainWindow
Private Sub btn_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
If (ctrl.HorizontalContentAlignment = HorizontalAlignment.Left) Then
ctrl.HorizontalContentAlignment = HorizontalAlignment.Right
btn.HorizontalContentAlignment = Windows.HorizontalAlignment.Right
Else
ctrl.HorizontalContentAlignment = HorizontalAlignment.Left
btn.HorizontalContentAlignment = Windows.HorizontalAlignment.Left
End If
ctrl.UpdateLayout()
End Sub
End Class
Ich kann nicht meine Inhalte Kontrollen mit Textblöcke ersetzen für verschiedene Gründe, aber ich muss noch in der Lage sein, den Inhalt auszurichten.
EDIT:
Während Narohi Arbeit um Vorschlag funktioniert, bin ich immer noch verwirrt darüber, warum der Horizontalcontentalignment-Eigenschaft des Inhaltskontrolle nicht den Inhalt auszurichten.
Ich habe versucht, ein Label-Steuerelement (das von ContentControl erbt) und seine HorizontalContentAlignment -Eigenschaft richtet den Inhalt ordnungsgemäß aus.
(Edit wieder: Ich bin nicht mehr verwirrt darüber, wie es scheint, dass der Horizontalcontentalignment nicht in allen Fällen verwendet wird.)
Hier ist mein aktualisierte XAML-Code:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ControlTemplate x:Key="AlignmentAwareControl" TargetType="ContentControl">
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</ControlTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ContentControl x:Name="ctrlTxt" Grid.Row="0"
Template="{StaticResource AlignmentAwareControl}"
HorizontalContentAlignment="Center" Padding="0">Hello World Content Control!</ContentControl>
<Label x:Name="ctrl" Grid.Row="1" HorizontalContentAlignment="Center" Padding="0">Hello World Label!</Label>
<ContentControl x:Name="ctrlImg" Grid.Row="2"
Template="{StaticResource AlignmentAwareControl}"
HorizontalContentAlignment="Center">
<Image Source="C:\Users\Frinavale\Pictures\Business_Woman.jpg"/>
</ContentControl>
<Button x:Name="btn" Grid.Row="3" Content="Change It" Click="btn_Click"/>
</Grid>
</Window>
Hier meine aktualisiert ist VB.NET-Code:
Class MainWindow
Private Sub btn_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
If (ctrl.HorizontalContentAlignment = HorizontalAlignment.Left) Then
ctrlImg.SetValue(ContentControl.HorizontalContentAlignmentProperty, Windows.HorizontalAlignment.Right)
ctrlTxt.SetValue(ContentControl.HorizontalContentAlignmentProperty, Windows.HorizontalAlignment.Right)
ctrl.SetValue(ContentControl.HorizontalContentAlignmentProperty, Windows.HorizontalAlignment.Right)
btn.HorizontalContentAlignment = Windows.HorizontalAlignment.Right
Else
ctrlImg.SetValue(ContentControl.HorizontalContentAlignmentProperty, Windows.HorizontalAlignment.Left)
ctrlTxt.SetValue(ContentControl.HorizontalContentAlignmentProperty, Windows.HorizontalAlignment.Left)
ctrl.SetValue(ContentControl.HorizontalContentAlignmentProperty, Windows.HorizontalAlignment.Left)
btn.HorizontalContentAlignment = Windows.HorizontalAlignment.Left
End If
ctrl.UpdateLayout()
End Sub
End Class
ich mich auf Ihren Rat bin auf der Suche,
-Frinny
Können Sie einen TextBlock in die Inhaltssteuerung einfügen? –