2013-05-01 3 views
0

ПРИМЕЧАНИЕ. Это один из первых случаев использования WPF.
Я пытаюсь выровнять определенный элемент управления, скажем, кнопку сейчас, в нижнем правом углу. Но когда я отлаживаю приложение, он пропускает 8 пикселей вправо и вправо. Я приложу 2 картины, чтобы показать вам, что происходит.Элементы управления WPF не выравниваются

Как сохранить кнопку на месте?

Мой XAML код:

<Window x:Class="Plugin_Manager.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Plugin Manager" Height="350" Width="525" Loaded="Window_Loaded_1"> 
<Grid x:Name="GridMain"> 
    <Button Content="Refresh" Margin="432,288,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75"/> 
    <ListView HorizontalAlignment="Left" Height="273" Margin="10,10,0,0" VerticalAlignment="Top" Width="497"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

</Grid> 

enter image description here enter image description here

+2

некоторые XAML может быть? – acrilige

+0

@acrilige Извините, это мой первый раз с использованием WPF. –

+1

@FoxyShadoww не использует конструктор WPF Visual Studio. он создает crappy XAML и скрывает детали реализации от вас. Ознакомьтесь с различными параметрами макета в WPF ('DockPanel',' StackPanel', 'Grid',' WrapPanel' и т. Д.) И как они могут использоваться для создания всех типов разрешений независимых макетов. Забудьте дизайнера. –

ответ

7

Если вы решили использовать Grid макет, который вы должны стараться избегать размещения объектов с помощью Margin. Margin следует использовать для создания буфера вокруг объекта, а не для перемещения его в определенную точку в окне. Используйте силу менеджера макета в своих интересах!

Вот пример Grid, который делает то, что вы ищете.

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <ListView Grid.Row="0" /> 

    <Button Grid.Row="1" HorizontalAlignment="Right" Content="Push Me" /> 

</Grid> 

Я бы также прочитал Layout Manager в WPF. Есть несколько; каждый из которых имеет свои преимущества & недостатки.

Адрес DockPanel.

<DockPanel> 
    <Button DockPanel.Dock="Bottom" HorizontalAlignment="Right" Content="Push Me" /> 
    <ListView /> 
</DockPanel> 

Чтобы создать буфер между кнопкой и хром окна вы могли бы сделать несколько разные вещи:

  1. <Grid Margin="10"> применит 10 пикселя пространство между всеми содержанием и хром окна на все стороны.
  2. <Grid Margin="0,0,10,10"> будет отступать все содержимое, но только справа & низ.
  3. <Grid Margin="10,0,10,10"> отступы вокруг, кроме верхней (я обычно делаю это, с другим значением поля).
  4. <Button Margin="0,0,10,10"> будет отступлем только кнопка от хрома (это прямой ответ на ваш вопрос).

    • Заменить Grid выше DockPanel для второго примера, или любой другой Layout Manager вы используете.

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

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

(это заканчивается мой «юзабилити и выглядеть и чувствовать важно» примечание стороны) :)

+0

Я вижу, но как бы вы выровняли кнопку с 10 пикселями снизу и справа, чтобы ее не докер в углу? Я не могу понять, что работаю –

+0

Я обновил свой ответ, чтобы ответить на ваш вопрос. –

1
<Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5"/> 
0

Некоторые пример кода поможет. Попробуйте использовать выравнивание в xaml для вашей кнопки, как показано ниже. Убедитесь, что поля на кнопке являются 0.

<Button Margin="0" HorizontalAlignment="Right" VerticalAlignment="Bottom"/> 

Глядя на пример кода, это ваши поля и выравнивание у вас есть, что, вероятно, причиной этого.

Только некоторые указатели, которые могут помочь. Вместо того, чтобы использовать большие поля для выравнивания элементов управления, мне гораздо проще работать с определениями столбцов и строк в сетке. Таким образом вы можете выровнять свои элементы управления с помощью сетки, и они будут правильно масштабироваться при изменении размера окна. Я привел пример в надежде, что он поможет в ваших новых приключениях с WPF!

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="150"/> 
     <ColumnDefinition Width="150"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Column="0" Grid.Row="0" Text="Version Date" Margin="3" VerticalAlignment="Center"/> 
    <TextBlock Grid.Column="0" Grid.Row="1" Text="{Binding DateSubmitted}" Margin="3"/> 
    <TextBlock Grid.Column="1" Grid.Row="0" Text="Report" Margin="3" VerticalAlignment="Center"/> 
    <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding ReportName}" Margin="3"/> 
</Grid> 
Смежные вопросы