2016-05-13 4 views
0

Я разрабатываю приложение, для которого GUI записывается/отображается с помощью XAML. На данный момент у меня есть большинство желаемых элементов, отображаемых в графическом интерфейсе, и теперь я работаю над компоновкой - позиционированием различных элементов в определенных местах.XAML- Как зафиксировать положение изображения относительно правой стороны окна дисплея?

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

Однако у меня есть один элемент, который я хочу выровнять вправо, чтобы он оставался «привязан» к правой стороне GUI - если я изменяю размер окна, перетаскивая его правую руку дальше вправо, он должен двигаться, чтобы оставаться на своем относительном расстоянии от края окна ... в данный момент этот элемент остается в позиции, которую я нарисовал (т.е. 900 пикселей слева), независимо от того, какой размер окно - так, если я изменю размер ширины окна до менее 900 пикселей, этот элемент не будет виден.

Часть XAML разметки я использовал для элементов, которые я хочу привязанный к левой стороне GUI является, например:

<Button Style="{DynamicResource NoChromeButton}" Click="backBtn_Click" Margin="0, 0, 0, 0" HorizontalAlignment="Left" > 
    <Image Source="C:\...\abc.png" Height="30" Width="40" /> 
</Button>  

Часть XAML разметки, который я пытаюсь использовать для элемента I хотим связать с правой стороны графического интерфейса пользователя является:

<Button Style="{DynamicResource NoChromeButton}" Click="referThis" Margin="0, 0, 0, 0" HorizontalAlignment="Right" > 
    <TextBlock>Button XYZ</TextBlock> 
</Button> 

Однако, установив HorizontalAlignment в Right, фактически не перемещайте кнопки текста в правом он все еще связан с левой стороны дисплея ... Единственный способ, который я нашел он направляется вправо, заключается в установке большого значения для его «х» позиции, то есть Margin="900, 0, 0, 0", но тогда позиция не относится к размеру окна, поэтому, если я перетаскиваю правую руку слишком далеко влево, это кнопка находится за пределами отображаемой области окна, поэтому я не вижу ее ...

Как я могу установить свойство кнопки так, чтобы ее положение было относительно правого края окна дисплея?

Редактировать

Все элементы в вопросе отображаются в одних и тех же <Grid> и <StackPanel> тегов, т.е.

<StackPanel> 
    <Grid ...> 
     <Button ... HorizontalAlignment="Left"> 
     </Button> 
     ... 
     <Button ... HorizontalAlignment="Right"> 
     </button> 
     ... 
    </Grid> 
    ... 
</StackPanel> 
+0

ответа не удовлетворил вас? –

ответ

1

Основная идея следующего решения является Grid.

Создайте ColumnDefinition с фиксированной шириной для каждого элемента, который вы хотите выровнять влево, и ColumnDefinition с фиксированной шириной для каждого элемента, который вы хотите выровнять вправо.В середине создайте ColumnDefinition с Width="*", поэтому WPF сначала вычисляет размер других столбцов на основе их фиксированной длины, а затем заполняет оставшееся пространство средним столбцом. Помните, что каждая кнопка должна правильно установить свойство Grid.Column, чтобы объявить столбец, которому он хочет принадлежать.

При изменении размера WindowGrid обновляет макет и гибкие дети. В этом случае единственным гибким дочерним элементом является средний столбец.

Вот простая реализация:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="auto"/> 
     <ColumnDefinition Width="auto"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="auto"/> 
     <ColumnDefinition Width="auto"/> 
    </Grid.ColumnDefinitions> 

    <Grid.Resources> 
     <Style TargetType="{x:Type Button}"> 
     <Setter Property="Width" Value="100"/> 
     <Setter Property="Height" Value="30"/> 
     <Setter Property="Margin" Value="10"/> 
     </Style> 
    </Grid.Resources> 

    <Button Grid.Column="0" Content="Button1Left"/> 
    <Button Grid.Column="1" Content="Button2Left"/> 
    <Button Grid.Column="3" Content="Button1Right"/> 
    <Button Grid.Column="4" Content="Button2Right"/> 

    </Grid> 

Для получения более полных руководств о контроле Grid, проверьте this, this и this.

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

+0

Пожалуйста, проверьте ответы, как принято, иначе сообщите нам больше информации, чтобы помочь вам. –

1

Было бы хорошо, чтобы знать, контейнер, включая кнопки (сетки, панели , другие?):

В любом случае Если вы положили:

<Button HorizontalAlignment="Right" 

в

<StackPanel Orientation="Horizontal"> 

Он должен работать ... Проверьте также, если нет противоречия не приносят в стиле ...

+0

Спасибо за ваше предложение - проблема с этим, как я понимаю, заключается в том, что тогда все в теге '' будет выровнено вправо ... У меня есть несколько элементов внутри этого '' и хочу, чтобы некоторые были выровнены справа, а другие выровнены слева. Я обновил свой OP, чтобы показать структуру моего XAML. – someone2088

+0

Я дал эту попытку, но если я поместил 'Orientation =" Horizontal "внутри тега' ', он вызывает все кнопки, которые я уже добавил в этот' ', чтобы отображаться примерно на полпути вниз страницы, а не наверху, так как они на данный момент ... – someone2088

+0

На самом деле, я думаю, что это другая цель. Вы говорите о VerticalAlignment . Добавьте VerticalAlignment = «Вверх» в вашей кнопке (и, пожалуйста, предоставьте нам свой код). –

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