2014-11-06 41 views
3

我有一个静态的资源:的Windows手机8.1绑定只“左” Margin属性

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

我想这个资源assing在样式的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声明为像以下这样的资源,编译器会抱怨它。

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

我不能从类派生的厚度,所以我不得不做出一个自定义的是建立一个厚度(CustomThickness类)

我怎么能解决这个问题?

回答

3

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

XAML

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

你应该创建转换器类返回厚度例如:

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不支持在二传手的价值结合。也许this文章帮助你。

+0

这是我在我的问题相同。我得到这个错误:未能分配给属性'%0'。 [Line:45 Position:54] – Herno 2014-11-06 19:08:47

+0

如果您提供有关错误消息的更多详细信息,我可以说WP不支持setter值的绑定。您可以在编辑的答案中查看解决方法。 – 2014-11-06 19:21:34