0

我正在开发一个使用 XAML 编写/显示 GUI 的应用程序。目前,我在 GUI 上显示了大部分所需的元素,现在正在处理布局——将各种元素定位在特定的位置。

大多数控件/按钮等都向左对齐,并保持“绑定”到 GUI 的左侧,即使我通过将窗口的左边缘进一步向左拖动来调整窗口大小(图标等移动到保持与窗口边缘的相对距离)。

但是,我有一个要向右对齐的元素,以便它将保持“绑定”到 GUI 的右侧 - 如果我通过将其右侧边缘进一步向右拖动来调整窗口大小,它应该移动以保持它与窗口边缘的相对距离......此刻,该元素停留在我绘制它的位置(即距离左侧 900 像素),无论窗口的大小是多少 -因此,如果我将窗口的宽度调整为小于 900 像素,则无法看到该元素。

我用于要绑定到 GUI 左侧的元素的 XAML 标记是,例如:

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

我尝试用于绑定到 GUI 右侧的元素的 XAML 标记是:

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

但是,将 to 设置HorizontalAlignmentRight, 实际上并没有将文本按钮移动到右侧 - 它仍然绑定到显示屏的左侧......我发现将其向右移动的唯一方法是设置一个大的它的'x'位置的值,即Margin="900, 0, 0, 0",但是该位置与窗口的大小无关,所以如果我将右侧边缘向左拖动太远,则该按钮位于窗口的显示区域之外,所以我看不出来...

如何设置按钮的属性,使其位置相对于显示窗口的右侧边缘?

编辑

所有有问题的元素都显示在相同的<Grid><StackPanel>标签内,即

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

2 回答 2

1

最好知道包含按钮(网格、面板、其他?)的容器:

无论如何,如果你放:

<Button HorizontalAlignment="Right"

<StackPanel Orientation="Horizontal">

它应该可以工作......也检查一下是否没有风格带来的矛盾......

于 2016-05-13T10:24:46.580 回答
1

以下解决方案的基本思想是Grid.

ColumnDefinition为要左对齐的每个元素创建一个宽度固定的,并ColumnDefinition为要右对齐的每个元素创建一个宽度固定的。在中间,使用 a 创建 a ColumnDefinitionWidth="*"因此 WPF 首先根据其他列的固定长度计算其他列的大小,然后用中间列填充剩余空间。请记住,每个按钮都必须Grid.Column正确设置属性以声明它想要属于的列。

当您调整 的大小时Window,会Grid更新其布局和灵活的子项。在这种情况下,唯一灵活的孩子是中间列。

这是一个简单的实现:

  <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控件的更完整教程,请查看thisthisthis

请注意,我为具有特定尺寸和边距的按钮设置了一个简单的样式,只是为了使结果清晰,但您可以使用自己的样式。

于 2016-05-13T16:34:58.987 回答