【问题标题】:WPF: Spacing between elements in stackpanelWPF:stackpanel中元素之间的间距
【发布时间】:2011-03-17 21:07:04
【问题描述】:

我有一个带有复选框的堆栈面板。 我似乎无法在具有边距属性的复选框之间设置相同的间距

谁能告诉我我做错了什么?

下面的代码给了我这个:


(来源:shrani.si

如您所见,元素之间的间距不是恒定的!

<StackPanel MinWidth="150" cal:Bind.Model="{Binding}" Orientation="Horizontal">
    <StackPanel.Resources>
        <Style TargetType="{x:Type CheckBox}">
            <Setter Property="Margin" Value="0,0,20,0"/>
        </Style>
    </StackPanel.Resources>
    <CheckBox IsChecked="{Binding IsShown}" Content="{Binding ModuleName, Converter={StaticResource localizeModuleAndFunctionConverter}}" 
              cal:Message.Attach="[Event Click] = [Action FilterShownModuleFunctions]" />
</StackPanel>

【问题讨论】:

  • 你能在这里附上图片吗?
  • 您确定复选框在 StackPanel 中吗?你能检查一下是否为 Checkbox 定义了任何全局样式吗?
  • 这个 StackPanel 是“独立的”还是某种 ItemsControl 的面板?您在示例中只显示了一个 CheckBox,因此很难判断图像如何与代码匹配。

标签: wpf margin stackpanel


【解决方案1】:

我猜你的问题是你的 MinWidth="150" 属性。我想你现在总共有 5 个堆栈面板。您有 4 个堆栈面板,每个面板都有自己的复选框。然后我假设您有第 5 个堆栈面板来容纳您的 4 个堆栈面板。

如果这是真的......那么问题是您的每个复选框都在 150 宽度(最小)的堆栈面板中,但您的第三个堆栈面板大于 150,因为文本太长了,它必须更大包含整个文本(加上您的 20 边距)。

删除 MinWidth="150" 我认为您将在每个复选框的文本之间获得 20 的边距。 (如果您希望复选框的实际框之间的间距均匀,那么您应该保持最小宽度,但要使其足够大,使其至少与包含最长文本的复选框一样宽)。

【讨论】:

  • 啊,好猜。我没有这样想——我假设 StackPanel 与 CheckBoxes 的比率是一对多,而不是每个 CheckBox 都是独立的。我想这引出了“为什么?”的问题。但这不是这里要问的... :)
  • 非常感谢。我正在更改 MinWidth 道具,但没有帮助。删除它确实有帮助,因为我想要文本而不是实际复选框之间的边距。在我做另一个问题之前,也许我可以在这里问......我想摆脱按钮的设置宽度。根据整个应用程序中的文本,使按钮全局调整大小的方法是什么?这是一个问题......第二个问题是如果我有三个按钮一个挨着,我如何设置所有相同的宽度(最大按钮的宽度)。希望我说得通……