我正在尝试在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。而值总是“无法评估表达式” - 输出为空白。
任何线索,无论是在这里发生了什么,还是更好的方式?
安德鲁
答案 0 :(得分:0)
您无法访问Name
,因为DependencyProperty
的Silverlight实施不会公开名称。为了拾取设置FontSize
属性的Setter,您需要使用一点反射来挑选Style.TargetType
一个名为“FontSizeProperty”的静态字段并提取其值。然后,如果您有匹配项,则将每个setter Property
与该值进行比较,然后您就会发现FontSize
的setter是负责任的。