水平对齐的元素重叠

时间:2014-01-19 15:06:45

标签: wpf

enter image description here

当我调整窗口大小时,元素重叠,我已经左右对齐设置,以便在调整大小时保持它们的位置。

这是代码,调整大小start private exam不应重叠setting,应该在setting之前停止,请指导。

(编辑)完整代码&添加了解释我希望窗口调整大小,其他控件点击其他控件,它应该停止调整大小或提供滚动,而不是重叠在其他控件上。

我有stackpanel banner张照片。当窗口垂直调整大小时,我不确定如何但没有其他控件重叠。但是,当调整大小和空间不足时,所有控件都会相互重叠。

<Window x:Class="Engine.ExamWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ExamWindow" WindowStartupLocation="CenterScreen">
    <Grid x:Name="GridMain">
        <Grid.RowDefinitions>
            <RowDefinition Height="25" />
            <RowDefinition Height="105" />
            <RowDefinition />
        </Grid.RowDefinitions>

        <Menu IsMainMenu="True" Background="Lavender" Grid.Row="0" >
            <MenuItem Header="_Exam" >
                <MenuItem Header="_Start practice" />
                <MenuItem Header="_Start Virtual." />
                <MenuItem Header="_Finish" />
                <Separator />
                <MenuItem Header="_Exit" Click="menuExamExit_Click" />
            </MenuItem>

            <MenuItem Header="_Navigation" />
            <MenuItem Header="_Tools" />
            <MenuItem Header="_Help" />
        </Menu>

        <StackPanel x:Name="StackPanelBanner" Grid.Row="1" />

        <Grid x:Name="GridContent" Grid.Row="2">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition Height="80" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <TabControl Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0">
                <TabItem Header="All Exams">
                    <Grid Background="#FFE5E5E5">
                        <TextBlock HorizontalAlignment="Center" Padding="0,10,0,0">No history available</TextBlock>
                    </Grid>
                </TabItem>
                <TabItem Header="Practice Exams">
                    <Grid Background="#FFE5E5E5">
                        <TextBlock HorizontalAlignment="Center" Padding="0,10,0,0">No history available</TextBlock>
                    </Grid>
                </TabItem>
                <TabItem Header="Virtual Exams">
                    <Grid Background="#FFE5E5E5">
                        <TextBlock HorizontalAlignment="Center" Padding="0,10,0,0">No history available</TextBlock>
                    </Grid>
                </TabItem>
            </TabControl>

            <StackPanel Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="0">
                <Grid>
                    <TextBlock HorizontalAlignment="Left" Padding="10,0,0,0" TextTrimming="CharacterEllipsis">Setting</TextBlock>
                    <TextBlock HorizontalAlignment="Right" Margin="0,0,120,0">Start Private Exam</TextBlock>
                    <TextBlock HorizontalAlignment="Right" Margin="0,0,10,0">Start Virtual Exam</TextBlock>
                </Grid>
                <TextBlock HorizontalAlignment="Right" Margin="0,0,10,0">Contact Support</TextBlock>
            </StackPanel>

        </Grid>


    </Grid>
</Window>

2 个答案:

答案 0 :(得分:1)

当包含三个TextBlocks的Grid的宽度太窄而不适合实际文本时,当然会有一些重叠。

你应该首先决定做什么。通常,当某个文本没有足够的空间时,它会被截断,通常使用省略号(...)。

http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.texttrimming(v=vs.110).aspx

如果您喜欢,只需按如下方式修改XAML:

        <TextBlock HorizontalAlignment="Left" Padding="10,0,0,0" TextTrimming="CharacterEllipsis">Setting</TextBlock>

答案 1 :(得分:1)

您的解决方案将根据您希望窗口/文字的显示方式而有所不同;一旦你开始缩小你的窗口,你就会用尽空间来适应屏幕上的所有文字(如你所知)。

最简单的解决方案可能是在您的窗口上设置MinWidthMinHeight属性,因此您可以限制允许小用户创建应用程序的位置。

你也可以缩小字体大小,或者在MinWidth上设置文本的Grid(虽然一旦你的窗口变得太小,你仍会遇到问题),还有一些其他选择。

这完全取决于你想要的结果。