2014-01-19 5 views
0

Горизонтально выровненные элементы, перекрывающие

Когда я изменить размер окна элементы накладываются друг на друга, я устанавливал выравнивание влево и вправо, так что изменение размеров они остаются на своих позициях.

вот код, при изменении размера 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> 
+0

Есть несколько способов решить вашу проблему, но какова ваша цель? Что должно произойти, если элементы не соответствуют заданной ширине? – dkozl

ответ

1

Когда ширина сетки, содержащей три TextBlocks является слишком узким, чтобы соответствовать фактический текст, конечно, будет что-то перекрытие.

Вы должны сначала решить, что делать. Обычно, когда места для определенного текста недостаточно, оно усекается, часто с эллипсисом (...).

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

это говорит об ошибке: запрошенное значение «CharacterEllipsis» не найдено, оно дает только 3 iems, wrap, nowrap, wrapwithoverflow – ADi

+0

Huh? Перейдите по ссылке и посмотрите пример. Вы используете WPF или что еще? –

+0

Я думаю, что это 'TextTrimming', а не' TextWrapping', который вы хотите установить (для «CharacterEllipsis»). – Chris

1

Ваше решение будет варьироваться в зависимости от того, как вы хотите, чтобы ваше окно/текст появляться; как только вы начнете сжимать свое окно, у вас не хватит места, чтобы соответствовать всему тексту на экране (как вам известно).

Наиболее простым решением может быть настройка свойств MinWidth и MinHeight на вашем окне, поэтому вы можете ограничить, насколько мелким пользователям разрешено создавать приложения.

Вы также можете уменьшить размер шрифта или установить MinWidth на Grid, в котором содержится текст (хотя у вас все еще будет проблема, когда ваше окно станет слишком маленьким) и еще несколько вариантов.

Это полностью зависит от вашего желаемого результата.

+0

Это тоже так! –

+0

ОК окно minwidth кажется хорошим выбором, и я буду использовать его. но такой же эффект применяется на 'height' при изменении размера. другие элементы управления перекрываются, есть ли способ ограничить изменение размера при попадании элемента управления – ADi

+0

'MinHeight' должен делать высоту. Эти свойства должны применяться к любому элементу управления в вашем дизайне, но опять же, это зависит от того, как именно вы хотите, чтобы ваш контроль вел себя, как только вы выбежали из комнаты. – Chris

Смежные вопросы