Windows phone 8.1仅绑定“左”边距属性

时间:2014-11-06 18:33:58

标签: c# windows xaml mobile windows-phone-8.1

我有一个静态资源:

<x:Double x:Key="dOffset">9.6</x:Double>

我想将此资源分配给Style中的Margin.Left属性。

我试过了:

  <Style x:Key="HomeButtonTextContainer" TargetType="StackPanel">
        <Setter Property="Margin">
            <Setter.Value>
                <Binding Path="Thickness">
                    <Binding.Source>
                        <local:CustomThickness Left="{StaticResource dOffset}" Top="0" Bottom="0"  Right="0" />
                    </Binding.Source>
                </Binding>
            </Setter.Value>
        </Setter>
    </Style>

但它不起作用。 我无法将厚度声明为如下资源,编译器会抱怨它。

 <Thickness x:Key="dOffset" Left="9.6" Right="0" Left="0" Top="0"></Thickness>

我无法从类厚度派生,所以我必须创建一个构建厚度的自定义(CustomThickness类)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您不能只设置TopMargin。您应该设置Thickness实例的所有值。如果您不想更改其他边距,只需将它们设置为零即可。

XAML

 <Style x:Key="HomeButtonTextContainer"
               TargetType="StackPanel">
            <Setter Property="Margin"
                    Value="{Binding Source={StaticResource dOffset}, 
                    Converter={StaticResource myConverter}}">                   
            </Setter>

你应该创建返回Thickness实例的转换器类:

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var topMargin = (double)value;
        return new Thickness(0, topMargin, 0, 0);
    }

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

编辑: Windows Phone不支持setter值的绑定。也许this文章会帮助你。