كيف يمكنني محاذاة صندوق نصي داخل StackPanel؟

StackOverflow https://stackoverflow.com/questions/1918847

  •  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، تحقق من العمودي القانوني.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top