كيف يمكنني محاذاة صندوق نصي داخل StackPanel؟
-
20-09-2019 - |
سؤال
في XAML التالية، كلمة "اختبار" أفقيا ولكن ليس رأسيا.
كيف يمكنني الحصول عليها للوسط عموديا؟
<Window x:Class="TestVerticalAlign2343.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStartupLocation="CenterScreen"
Title="Window1" Height="768" Width="1024">
<DockPanel LastChildFill="True">
<Slider x:Name="TheSlider"
DockPanel.Dock="Left"
Orientation="Vertical"
HorizontalAlignment="Center"
HorizontalContentAlignment="Center"
Minimum="0"
Maximum="10"
Cursor="Hand"
Value="{Binding CurrentSliderValue}"
IsDirectionReversed="True"
IsSnapToTickEnabled="True"
Margin="10 10 0 10"/>
<Border DockPanel.Dock="Right" Background="Beige"
Padding="10"
Margin="10"
CornerRadius="5">
<StackPanel Height="700">
<TextBlock
Text="Test"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="200" x:Name="TheNumber"/>
</StackPanel>
</Border>
</DockPanel>
</Window>
المحلول
ستاك بانيل، بغض النظر عن مدى امتدادك، سينهار في جميع أنحاء الأطفال. لا يمكنك أن تجعلها تنمو أكثر من ذلك. أساسا، أن "الارتفاع = 700" لا يساعدك.
لذلك إما أن تحدد العمودية على STACKPANEL إلى "المركز" حتى يذهب StackPanel إلى وسط DockPanel ... أو قم بإزالة StackPanel تماما وتعيين Verticalignment = "Center" على TextBlock.
نصائح أخرى
يبدو أنا وردا على سؤال حول هذا السؤال قبل 10 أشهر, ، حصلت على السيناريو أعلاه للعمل عن طريق استبدال Stackpanel. مع dockpanel lastchildfill = صحيح مثله:
<DockPanel LastChildFill="True">
<TextBlock
DockPanel.Dock="Top"
Text="Test"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="200" x:Name="TheNumber"/>
</DockPanel>
تعثرت عبر هذا يبدو أنه يعمل تماما:
<Grid>
<TextBlock Text="My Centered Text"
TextAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
يضمن الشبكة أن مربع النص الفردي بداخله يملأ الخلية الانفرادية في الشبكة والعمالية في TextBlock يضمن أن النص يتمركز في الداخل من.
ما عليك سوى تحديد موقع / محاذاة نصك أفقيا ولكنك تحتاج (مراكز المقتطفات أعلاه في هذا المحور أيضا، ولكن تغيير هذا لا يغير التركيز الرأسي).
داخل StackPanel الذي يحيط بمقصات TextBlock، تحقق من العمودي القانوني.