我正在尝试将缩放缩放功能添加到数据绑定ListBox。最有效的方法是什么?我已将ListBox放在Grid控件中并使其可滚动。
这是我目前的代码。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="10,0,10,10" Background="Black" >
<ListBox Name="lstText" FontSize="24" Foreground="White" SelectionMode="Single" Margin="10,0,10,10" ScrollViewer.VerticalScrollBarVisibility="Visible" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel >
<TextBlock Text="{Binding Text}" TextWrapping="Wrap"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener
Tap="GestureListener_Tap"
PinchCompleted="GestureListener_PinchCompleted"
Flick="GestureListener_Flick">
</toolkit:GestureListener>
</toolkit:GestureService.GestureListener>
答案 0 :(得分:1)
列表框不是为了缩放而设计的(通过捏合或任何其他方法)。
如果要实现此功能,则必须以不同的缩放级别重新绘制内容 但是你需要克服许多问题:
总结:这几乎肯定是不必要的,并且会非常复杂并且难以做好。如果你真的想尝试这个,那就去吧,然后发布任何问题的代码。
答案 1 :(得分:0)
Alex Yakhnin提供了滚动长文本的解决方案。
Creating Scrollable TextBlock for WP7. - Alex Yakhnin's Blog
您可以在ScrollViewer中包装TextBlock,这可能足以满足您的需求。如果您的文字足够长,那么当文字变得更大时,您将会遇到各种各样的墙壁。 Alex的解决方案是一个控件,它将StackPanel包装在ScrollViewer中,并将TextBlocks添加到可管理部分的StackPanel中。
答案 2 :(得分:0)
我自己用manipDelta完成了这个,但它根本不顺利
在类属性
中 x:local="clr-namespace:YourApplicationNamespace"
在XAML中:
<Grid x:Name="LayoutRoot" ManipulationDelta="LayoutRoot_ManipulationDelta">
<Grid.Resources>
<local:CustomSettings x:Key="Settings"/>
<DataTemplate x:Key="verseDataTemplate">
<TextBlock FontSize="{Binding Path=Font35, Source={StaticResource Settings}}"
Text="{Binding}"/>
</DataTemplate>
</Grid.Resources>
<ListBox ItemTemplate="{StaticResource verseDataTemplate}"/>
在后面的代码中:
private void LayoutRoot_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
try
{
var fnt = lboVerses.FontSize;
if (e.DeltaManipulation.Scale.X == 0 || e.DeltaManipulation.Scale.Y == 0) return;
if (e.DeltaManipulation.Scale.X > 1 || e.DeltaManipulation.Scale.Y > 1)
{
if (fnt < 72)
BibliaSettings.font35++;
}
else if (e.DeltaManipulation.Scale.X < 1 || e.DeltaManipulation.Scale.Y < 1)
{
if (fnt > 5)
BibliaSettings.font35--;
}
}
catch (Exception x)
{
Debugger.Log(0, "Errors", x.Message + "\n" + x.StackTrace);
}
}
您的CustomSettings类
public class CustomSettings : INotifyPropertyChanged
{
public static List<CustomSettings> Instances;
public CustomSettings()
{
if (Instances == null) Instances = new List<CustomSettings>();
Instances.Add(this);
}
public static int font35
{
get
{
return Get("Font35", 35); //Provide mechanism to get settings
}
set
{
Save(value, "Font35");//Provide mechanism to store settings
Instances.ForEach(inst => inst.OnPropertyChanged("Font35"));
}
}
public int Font35
{
get
{
return font35;
}
set
{
font35=value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}