在代码中访问样式设置器

时间:2011-09-16 10:38:28

标签: silverlight data-binding windows-phone-7

我正在尝试在ListBox上实现捏合/拉伸缩放:

<ListBox
   Grid.Row="1"
   ManipulationCompleted="ListBox_ManipulationCompleted"
   ItemsSource="{Binding Paras}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <TextBlock
         DataContext="{Binding}"
         TextWrapping="Wrap"
         Text="{Binding Text}"
         FontSize="{Binding FontSize}">
       </TextBlock>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

我真正想要做的是将RenderTransform绑定到我的ViewModel的Zoom属性,但这是不允许的。我可以绑定到FontSize并正确更改FontSize,但我必须在我的代码隐藏中对其进行硬编码。我真正想要做的是尊重设计师设置的FontSize设置,并对所有FontSizes应用统一缩放。所以在我的代码背后我有:

Style style = App.Current.Resources[_XElement.Name.LocalName] as Style;
if ( style != null )
{
  foreach ( var s in style.Setters )
  {
    Setter setter = s as Setter;
    if ( setter != null )
    {
        Debug.WriteLine(setter.Property + "=" + setter.Value);
    }
  }
}

我无法访问setter.Property.Name(编译时错误),虽然我可以看到它是调试器中的FontSize。而值总是“无法评估表达式” - 输出为空白。

任何线索,无论是在这里发生了什么,还是更好的方式?

安德鲁

1 个答案:

答案 0 :(得分:0)

您无法访问Name,因为DependencyProperty的Silverlight实施不会公开名称。为了拾取设置FontSize属性的Setter,您需要使用一点反射来挑选Style.TargetType一个名为“FontSizeProperty”的静态字段并提取其值。然后,如果您有匹配项,则将每个setter Property与该值进行比较,然后您就会发现FontSize的setter是负责任的。