【问题标题】:Align control on the right in grid在网格右侧对齐控件
【发布时间】:2015-04-26 11:29:12
【问题描述】:

我有一个包含 3 列的网格:

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

我想让最后一列靠右对齐,靠近屏幕边缘。 目前,第三列出现在第二列之后不久。我不想以像素为单位传递宽度,而是自动计算。

我尝试在第三列属性 Horizo​​ntalAlignment="Right" 中的元素上使用,但不幸的是它不起作用。

【问题讨论】:

  • 您的网格本身是否跨越整个屏幕?
  • 是的,它是整个容器的跨度
  • 我不明白你的问题,所以你的代码没有像预期的那样工作?您能否发布一张显示其外观的屏幕截图和显示其外观的第二张图片?

标签: xaml windows-phone-7 windows-phone-8 windows-store-apps windows-phone-8.1


【解决方案1】:

如果您的 Grid 位于 Stackpanel 内部,则无论您做什么,它只会将自身调整为 Stackpanel 的宽度。

如果您的最后一列定义是 Auto ,则不能将其与屏幕右侧对齐。将第二个定义更改为 Auto,将最后一个定义更改为 *。

【讨论】:

  • 如果您的 Grid 位于 DataTemplate 内部,则必须将使用此模板的控件设置为 Horizo​​ntalContentAlignment 才能拉伸。
【解决方案2】:

由于您的最后一列具有Auto 宽度,因此无需将内容的HorizontalAlignement 设置为Right。我的猜测是

  1. 您的Grid 没有HorizontalAlignementStretch(应该是默认值),或者
  2. 任何包含Grid(可能是StackPanel?)的东西都没有给它完整的宽度。

我可以确定是否可以检查 XAML 的其余部分。先检查这两点。如果这些没有帮助,请发布您的 XAML 的其余部分。

【讨论】:

    【解决方案3】:

    如果网格内有相同类型的控件,则可以在&lt;Grid.Resources&gt; 中为所有控件分配样式,仅当 Grid.Column 属性的值为 2(带有触发器)时才设置 Horizo​​ntalAlignment 属性。 但是更容易遍历所有子节点,检查每个子节点的列属性,然后设置对齐方式,比如

    foreach (Control ctrl in yourGrid.Children) {
        if(Grid.GetColumn(ctrl) == 2) ctrl.HorizontalAlignment = HorizontalAlignment.Right;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-28
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      相关资源
      最近更新 更多