WPF:StackPanel中元素之间的间距

7
我有一个带有复选框的堆栈面板。 我似乎无法使用margin属性使复选框之间具有相同的间距。
有人可以告诉我我做错了什么吗?
下面的代码给我这个: http://www.shrani.si/f/1Y/M6/4eniAdAw/margin.png (来源: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>

你能在这里附上图片吗? - Amsakanna
您确定复选框位于 StackPanel 中吗?您能否检查是否定义了任何全局样式的复选框? - Ragunathan
1
这个 StackPanel 是“独立的”还是某种 ItemsControl 的面板?你的示例中只显示了一个复选框,所以很难确定图像与代码的匹配情况。 - Wonko the Sane
1个回答

4
我猜测你的问题在于MinWidth="150"属性。我认为你现在总共有5个StackPanel。你有4个StackPanel,每个都拥有自己的复选框。然后我假设你有第五个StackPanel,它包含了你的4个StackPanel。
如果这是真的...那么问题在于,你的每个复选框都在一个宽度为150(最小值)的StackPanel中,但是你的第三个StackPanel比150要大,因为文本太长,必须更大才能容纳整个文本(加上20的边距)。
删除MinWidth="150",我认为你会在每个复选框的文本之间获得20的边距。(如果你想在实际复选框的盒子之间获得均匀的间距,则应保留你的minwidth,但要使其足够宽,至少与包含最长文本的复选框一样宽)。

啊,猜得不错。我没有这样想过——我假设一个 StackPanel 对应多个 CheckBoxes,而不是每个 CheckBox 都在自己的 StackPanel 中。我猜这引出了“为什么?”的问题,但这不是这里要问的问题... :) - Wonko the Sane
非常感谢。我一直在更改MinWidth属性,但没有帮助。删除它确实有所帮助,因为我想要文本和实际复选框之间的边距。在我提出另一个问题之前,也许我可以在这里问一下... 我想摆脱为按钮设置宽度的方法。有什么方法可以使整个应用程序中的按钮根据其文本全局调整大小?这是一个问题...第二个问题是如果我有三个按钮并排放置,如何设置它们相同的宽度(最大按钮的宽度)。希望我表达清楚... - no9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接