WPF:相对于位图对齐 GRID 内容

发布于 2024-11-16 03:49:24 字数 2746 浏览 5 评论 0原文

我必须在位图下显示几个字符串。一次可以显示的最大字符串数为 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>

I have to display few strings under a bitmap . At a time maximum number of strings that can displayed are 5 and not always all the 5 strings will be displayed. Also the length of the strings vary. Whatever be the case, I want to display these strings in a visually appealing manner under the bitmap. Like, if just one string, I want to position it centrally under the bitmap. If 2 strings, I want to space the strings nicely and center it under the bitmap and so.
I know only at run time the strings to display, number of strings ( min 1 and max 5) to display and also length of string.

I wrote the below XAML code, but I am unable to position the strings nicely for all my conditions. Bitmap1 is a circle, bitmap2 is left arrow and bitmap3 is right arrow.

Can someone help me here?

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

败给现实 2024-11-23 03:49:24

您想要做的是通过创建基于面板的自定义控件来创建自定义面板。覆盖 ArrangeOverride,然后将内容准确放置在您想要的位置,就像您有一个可以使用的画布一样,因为当您覆盖 ArrangeOverride 时,您的面板就像一个画布。网格本身就是一个自定义面板:-)

What you want to do is create a custom panel by creating a custom control based on panel. Override ArrangeOverride and then place things exactly where you want them as if you have a canvas to work with, because your panel is like a canvas when you override ArrangeOverride. Grids are a custom panel themselves :-)

紧拥背影 2024-11-23 03:49:24
            <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>
            <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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文