【发布时间】:2017-05-15 20:19:42
【问题描述】:
我的应用中有一个TextBlock。我想在它上面处理pinch in & out 来调整它的字体。当ManipulationDelta 事件触发时,我检查Scale 属性,但大多数时候Scale 是1,即使我的手指越来越远或越来越近。
或者它没有像我预期的那样工作。
谁能给我举个例子,如何找到夹入或夹出发生的情况?
【问题讨论】:
我的应用中有一个TextBlock。我想在它上面处理pinch in & out 来调整它的字体。当ManipulationDelta 事件触发时,我检查Scale 属性,但大多数时候Scale 是1,即使我的手指越来越远或越来越近。
或者它没有像我预期的那样工作。
谁能给我举个例子,如何找到夹入或夹出发生的情况?
【问题讨论】:
在它周围放置一个滚动查看器。它具有开箱即用的缩放功能。
【讨论】:
您是否将TextBlock 上的ManipulationMode 设置为Scale?
另外,我建议您将操作放在具有Transparent 背景的Grid 或Border 容器上以捕获操作事件。在TextBlock 的情况下,您可能会遇到命中测试问题,这可能会导致操作事件未被触发。
<Grid ManipulationMode="Scale" ManipulationDelta="YourHandler">
<TextBlock Text="YourTextBlock" />
</Grid>
【讨论】:
我不确定您的代码是否存在问题,但我制作了一个简单的代码示例。它可以实现您的目标。
请检查以下代码:
<Grid Background="Red" Height="200" ManipulationDelta="StackPanel_ManipulationDelta" ManipulationMode="Scale">
<TextBlock FontFamily="Verdana"
FontSize="32"
FontWeight="Bold"
Foreground="SteelBlue"
Text="Scaled Text" IsTextScaleFactorEnabled="True">
<TextBlock.RenderTransform>
<ScaleTransform x:Name="ScaleTransform" ScaleX="1.0" ScaleY="1.0" />
</TextBlock.RenderTransform>
</TextBlock>
</Grid>
private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
ScaleTransform.ScaleX *= e.Delta.Scale;
ScaleTransform.ScaleY *= e.Delta.Scale;
}
【讨论】: