Próbuję zastosować "wyrównanie tekstu" do elementu ContentControl. Ponieważ ContentControl nie ma poziomej ani pionowej właściwości wyrównania tekstu, takiej jak TextBlock, próbuję użyć właściwości HorizontalContentAlignment ContentControl.Wyrównywanie tekstu za pomocą ContentControl za pomocą właściwości HorizontalContentAlignment
Mój problem polega na tym, że nie mogę uruchomić go z samym ContentControl.
W moim przykładzie mam kontrolę treści wyświetlającą "Witaj świecie" i przycisk wyświetlający "zmień to".
Po kliknięciu przycisku ustawię HorizontalContentAlignment na formancie zawartości i przycisku. Treść przycisku zmienia się, ale treść kontrolki zawartości nie.
Tu jest mój kodu XAML:
<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>
I tu jest mój kod VB.NET dla zdarzenia kliknięcia przycisku:
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
nie jestem w stanie wymienić moje kontroli treści z bloków tekstowych dla z różnych powodów, ale nadal muszę mieć możliwość dostosowania treści.
EDIT:
Podczas Narohi obejść prac sugestia, nadal jestem zdezorientowany, dlaczego własność HorizontalContentAlignment w kontroli treści nie ma wyrównać zawartość.
Wypróbowałem formant Label (który dziedziczy z ContentControl), a jego właściwość HorizontalContentAlignment właściwie wyrównuje zawartość.
(Edit znowu: Ja już nie mylić o to, wydaje się, że nie jest wykorzystywana HorizontalContentAlignment poprawnie we wszystkich przypadkach).
Tu jest mój zaktualizowany kod XAML:
<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>
Tutaj jest mój zaktualizowany kod VB.NET:
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
Czekam na poradę,
-Frinny
Czy można umieścić TextBlock w kontroli treści? –