WPF: выравнивание содержимого GRID относительно растрового изображения - PullRequest
1 голос
/ 16 июня 2011

Мне нужно отобразить несколько строк под растровым изображением.Максимальное количество отображаемых строк - 5, и не всегда отображаются все 5 строк.Также длина строк варьируется.Как бы то ни было, я хочу отобразить эти строки визуально привлекательным способом под растровым изображением.Мол, если только одна строка, я хочу расположить ее по центру под растровым изображением.Если 2 строки, я хочу аккуратно расположить строки и расположить их по центру под растровым изображением и так далее.Я знаю только во время выполнения отображаемые строки, количество отображаемых строк (минимум 1 и максимум 5), а также длину строки.

Я написал приведенный ниже код XAML, но не могу расположить строкихорошо для всех моих условий.Растровое изображение 1 - это круг, растровое изображение 2 - стрелка влево, а растровое изображение 3 - стрелка вправо.

Может ли кто-нибудь помочь мне здесь?

<Grid x:Name="Graphics" Grid.Column="1" Background="Black">
        <Grid.RowDefinitions>
            <RowDefinition Height="0.319*"/>
            <RowDefinition Height="0.56*"/>
            <RowDefinition Height="0.321*"/>
        </Grid.RowDefinitions>
        <Image Height="72" Source="/DataBinding;component/Bitmap1.bmp" Stretch="Fill" Width="108" Grid.Row="1" />
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.408*"/>
                <ColumnDefinition Width="0.15*"/>
                <ColumnDefinition Width="0.408*"/>
            </Grid.ColumnDefinitions>
            <Image x:Name="Next" Height="48" Width="48" Grid.Column="2" Source="/DataBinding;component/Bitmap3.bmp"  HorizontalAlignment="Left" />
            <Image x:Name="Prev" Width="48" Height="48" Grid.Column="0" Source="/DataBinding;component/Bitmap2.bmp"  HorizontalAlignment="Right"/>

            <Grid  HorizontalAlignment="Center" ShowGridLines="True" Width="Auto" Grid.ColumnSpan="3" Margin="38,69,41,-40">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Visibility="Visible" Text="String1" Padding="10" Grid.Column="0" FontSize="14.667" TextAlignment="Center" Foreground="White" />
                <TextBlock Visibility="Visible" Text="String2" Padding="10" Grid.Column="1" FontSize="14.667" TextAlignment="Center" Foreground="White" />
                <TextBlock Visibility="Visible" Text="String3" Padding="10" Grid.Column="2" FontSize="14.667" TextAlignment="Center" Foreground="White" />
                <TextBlock Visibility="Visible" Text="String4" Padding="10" Grid.Column="3" FontSize="14.667" TextAlignment="Center" Foreground="White" />
                <TextBlock Visibility="Visible" Text="String5" Padding="10" Grid.Column="4" FontSize="14.667" TextAlignment="Center" Foreground="White" />
            </Grid>
        </Grid>
    </Grid>

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

            <StackPanel Name="stack1" Orientation="Horizontal" Width="Auto" Background="Red" >
                <TextBlock FontSize="14.667" Width="Auto" TextAlignment="Center">
                                <Run x:Name="String1" Text="String1" />
                                <Run x:Name="String2" Text="String2" />
                <Run x:Name="String3" Text="String3" />
                <Run x:Name="String4" Text="String4" />
                <Run x:Name="String5" Text="String5" />

            </TextBlock>
          </StackPanel>
        </Grid>
    </Grid>
0 голосов
/ 16 июня 2011

То, что вы хотите сделать, это создать пользовательскую панель, создав пользовательский элемент управления на основе панели.Переопределите ArrangeOverride, а затем разместите вещи именно там, где вам нужно, как будто у вас есть холст для работы, потому что ваша панель похожа на холст, когда вы переопределяете ArrangeOverride.Сетки - это пользовательские панели: -)

...