15

要素の左マージンと右マージンに割り当てられなかった値を表す int を返すバインディング値があります。

Heresは私が試したことですが、コンパイルできません。

マージン全体を設定すると機能しますが、左右だけが必要です。

Xaml:

<Image x:Name="_image" Source="mat.png" Margin="{Binding EditorRow.BondIndent},0,{Binding EditorRow.BondIndent},0" />

クラス:

public int BondIndent
{
    get { return _bondSequence * 5; }
}
4

4 に答える 4

29

マージンを返しますか?

public Thickness Margin
{
    get { return new Thickness(BondIndent,0,BondIndent,0);}
}

次に変更します。

<Image x:Name="_image" Source="mat.png" Margin="{Binding EditorRow.Margin}" />
于 2013-01-16T14:33:09.797 に答える
15

これにはおそらくValueConverterを使用する必要があります。何かのようなもの:

public class LeftRightThicknessConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is int)
        {
            int margin = (int)value;
            return Thickness(margin, 0, margin, 0);
        }
        return Thickness();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

その後、次の方法でコンバーターを使用できます。

<Grid>
    <Grid.Resources>
        <xxx:LeftRightThicknessConverter x:Key="LeftRightThicknessConverter" />
    </Grid.Resources>

    <Image Margin="{Binding SomePropertyPath, Converter={StaticResource LeftRightThicknessConverter}}" />
</Grid>

xxxそれが有効な xml-namespace であると仮定します。

于 2013-01-16T14:17:29.653 に答える
2

を返す代わりに、実際には次のようなintさを返すことができます。Margin

public Thickness BondIndent
{
    get
    {
        int margin = _bondSequence * 5;
        return new Thickness(margin, 0, margin, 0);
    }
}

この例が機能する理由はThickness、1、2、または4つの引数を取るコンストラクターがオーバーロードされているためです。1つの引数を取るコンストラクターが呼び出されると、すべての側がその値に初期化されます。WPFは、これをThicknessバインドされた値に基づいて自動的にに変換します。

別のトピックでは、または今BondIndent呼ばれる方が良いかもしれません。BondMarginBondThickness

于 2013-01-17T10:20:02.153 に答える