我有一个静态资源:
<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类)
我该如何解决这个问题?
答案 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文章会帮助你。