XAML 中的绑定中是否可以仅包含边距的一部分

问题描述 投票:0回答:1

我有一个 XAML,包含如下信息:

... Margin="10,20,30,40" ...

我知道在装订中设置左边距非常容易,如下所示:

Margin="{Binding margin_value}"

...但这不会填写值“20, 30, 40”。

我在互联网上搜索的每个地方都看到相同的答案:

您正在寻找顶部、左侧、底部和右侧。为了填写这些内容,这里是 C# 代码。

我对 C# 代码不感兴趣,我想直接在 XAML 中将其设置为绑定结果,但我尝试的所有方法(

Margin.X="{Binding ...}"
Margin.Left="{Binding ...}"
Left.Margin="{Binding ...}"
,...)似乎都不起作用,尽管我相信这应该很容易。

有人知道怎么做吗?
预先感谢

c# xaml binding margins
1个回答
0
投票

您可以根据需要指定四个厚度属性中的任意数量或数量,可以是

Left
Top
Left
Buttom
中的一个、两个、三个或四个。
然而,省略 1 只会隐式使其保持 0 值。
所以你得到的只是不写0。
Margin
或其他
Thickness
类型属性的 WPF 内置转换器采用 1、2 或 4 个参数,但不是 3 个。
当您指定一两个值时,它只是一种简写形式,无论如何都会应用所有四个值。
因此,如果您不想指定其中之一,您可以使用更详细的语法来命名属性:

<TextBox Text="Hello">
  <TextBox.Margin>
      <Thickness Left="8" Top="2" Bottom="2" /><!-- Right missing -->
  </TextBox.Margin>
</TextBox>

<TextBox Text="Hello">
  <TextBox.Margin>
      <Thickness Right="10" /><!-- Left Top Bottom -->
  </TextBox.Margin>
</TextBox>

但正如已经说过的,这只是指定此标记的一种冗长方法:

<TextBox Text="Hello" Margin="8 2 0 2" />
<TextBox Text="Hello" Margin="0 0 10 0" />

此外,厚度只是一个普通的结构体,它没有依赖属性。因此,您无法绑定到指定的四维属性。 结论:使用内置类型转换器并指定所有 4 个速记不能满足您需求的值。

© www.soinside.com 2019 - 2024. All rights reserved.