2013-03-12 5 views
0

У меня довольно странное поведение моего приложения WPF: позиция XY моей кнопки во время выполнения, по-видимому, расходится с этим, когда я устанавливаю ее в своем xaml-редакторе Visual Studio (есть ли название для него btw?)XY координаты кнопки WPF перемещаются во время выполнения?

У него нет установочных элементов или панелей вокруг него, я установил его только по краям. Моя кнопка имеет следующий код:

<Button Content="OK" Height="23" Margin="213,319,4,7" Name="button3" Width="75" IsCancel="True" Click="button3_Click" IsEnabled="False" />

Edit:

Поле фиксировано, потому что это не является изменяемым диалогом. Как вы можете видеть, кнопка слегка перемещается влево и вверх:

XAML-редактор:

enter image description here

Runtime:

enter image description here

Почему так и как я могу почини это?

+1

расходящийся как? И каковы окружающие метки? В любом случае позиционирования с маржи следует избегать. –

+0

такой же вопрос здесь, что вы хотите сказать с расходящимся ... движется ли кнопка, когда вы ничего не делаете или когда вы изменяете размер окна ... и т. Д. @HenkHolterman, почему бы не позиционировать с пометкой? что было бы альтернативой? (или вы хотите сказать, что размер не должен быть сделан по марже? тогда я полностью согласен с вами :)) ... Кстати, у вышеуказанного кода установлены поля * и *, поэтому один из этих параметров должен быть пренебречь в любом случае, особенно когда окно будет изменено ... –

+0

отредактировал вопрос. –

ответ

0

Я полагаю, что приведенная ниже ссылка на «Выравнивание», «Поля» и «Заполнение» помогут вам понять, как она работает?

Else разместить панели обертки, такие как Stackpanel, Wrappand или Grid. Подходит для работы с макетом элементов управления.

EDIT: проблема была в ResizeMode = "NoResize". Если вы remve этого атрибута в Window теге, то выравнивание будет хорошо

Link to Refer

+0

Я думаю, что понял концепцию выравнивания, поля и прокладки. Я просто удивляюсь, почему мой элемент даже движется, хотя мое окно не изменялось в любое время. скажите, почему это должно измениться, тогда это XY-позиция? –

+0

Я не мог видеть ваши изображения. можете ли вы исправить это? то я помогу вам – Smaug

+0

посмотреть его сейчас? http://www.abload.de/img/12_03_2013_1byuwk.png/http://www.abload.de/img/12_03_2013_2xbu1x.png –

0

Люди, это худший способ установить положение элемента пользовательского интерфейса в WPF!

реорганизовать XAML-то вроде этого:

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

    <ListView Grid.Row="0" Name="TableList" Margin="5"/> 

    <Button Grid.Row="1" Name="button3" Content="OK" 
      Margin="5" 
      Width="75" 
      HorizontalAlignment="Right"/> 
    </Grid> 

Вы видите? Существует Grid, который обрабатывает положение всех его детей (в данном случае ListView и Button).

Button ставится на второй , выровненный справа (HorizontalAlignment).

И Grid, и его дети имеют Margin=5. Это гарантирует, что размер каждого ребенка равен отношению к детям adiacent и другим элементам управления за пределами Grid.

Кроме того, ListView и Button полностью выровнены.

Проблема с подхода заключается в том, что вы установили ButtonWidth и ИТС Left Marginи ИТС Right Margin.Возможно, общее количество неверно, потому что граница Window съедает некоторый пиксель, или просто WPF не может обрабатывать всю информацию вместе и пропускает расчет, кто знает, но в результате вы должны оставить хотя бы один параметр бесплатно , В моем примере я оставил бесплатно Margins из окна. Margin=5 устанавливает только относительное отношение Margin к другим элементам управления, но насколько Button удален от левой границы Window - это что-то, что я могу вычислить для графического движка WPF.