Tôi đang cố áp dụng "căn chỉnh văn bản" cho ContentControl. Kể từ khi ContentControl không có một tài sản căn chỉnh ngang hoặc dọc như TextBlock, tôi đang cố gắng sử dụng thuộc tính HorizontalContentAlignment của ContentControl.Căn chỉnh văn bản bằng ContentControl bằng thuộc tính HorizontalContentAlignment
Vấn đề của tôi là tôi không thể làm cho nó hoạt động với chính ContentControl.
Trong ví dụ của mình, tôi có kiểm soát nội dung hiển thị "hello world" và nút hiển thị "thay đổi".
Khi tôi nhấp vào nút, tôi đặt HorizontalContentAlignment trên điều khiển nội dung và trên nút. Nội dung của nút thay đổi, nhưng nội dung của nội dung kiểm soát thì không.
Đây là mã XAML của tôi:
<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>
Và đây là mã VB.NET của tôi cho sự kiện nhấn nút:
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
Tôi không thể thay thế điều khiển nội dung của tôi với các khối văn bản cho nhiều lý do khác nhau, nhưng tôi vẫn cần có khả năng căn chỉnh nội dung.
EDIT:
Trong khi Narohi việc xung quanh công trình gợi ý, tôi vẫn còn lúng túng về việc tại sao sở hữu HorizontalContentAlignment kiểm soát nội dung không sắp xếp nội dung.
Tôi đã thử điều khiển Nhãn (được kế thừa từ ContentControl) và thuộc tính HorizontalContentAlignment của nó phù hợp đúng nội dung.
(Chỉnh sửa lần nữa: Tôi không còn bối rối về vấn đề này, có vẻ như rằng HorizontalContentAlignment không sử dụng đúng trong mọi trường hợp.)
Đây là mã XAML cập nhật của tôi:
<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>
đây là mã của tôi cập nhật 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
tôi đang mong chờ đến lời khuyên của bạn,
-Frinny
Bạn có thể đặt một TextBlock trong kiểm soát nội dung không? –