【发布时间】:2010-11-22 11:00:32
【问题描述】:
我希望将字母表中的每个字母都作为一个 Windows Phone PanoramaItem。请在这一点上接受它。每个字母都以多种方式显示(斜体、常规、粗体、其他字体……)。当然我可以手动完成,但它不灵活。所以我决定写一个简单的 Letter 类,它基本上包含两个字符——一个字母的大写和小写。想法是将这些字母的集合绑定到全景图 (myPano.ItemsSource=collection;)。这是模板:
<DataTemplate
x:Name="LetterTemplate">
<controls:PanoramaItem
Background="Black"
HorizontalAlignment="Stretch"
Name="{Binding Path=UpperCase}"
ManipulationCompleted="A_ManipulationCompleted"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"/>
<ColumnDefinition Width="0.5*"/>
</Grid.ColumnDefinitions>
<StackPanel
Grid.Row="0"
Grid.Column="0"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=UpperCase}"
Foreground="{StaticResource PhoneAccentBrush}"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontSize="100" />
<TextBlock
Text="{Binding Path=UpperCase}"
HorizontalAlignment="Center"
Foreground="White"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
<StackPanel
Grid.Row="0"
Grid.Column="1"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=UpperCase}"
Foreground="White"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontStyle="Italic"
FontSize="100" />
<TextBlock
Text="{Binding Path=UpperCase}"
HorizontalAlignment="Center"
Foreground="{StaticResource PhoneAccentBrush}"
FontStyle="Italic"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="0"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=LowerCase}"
Foreground="{StaticResource PhoneAccentBrush}"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontStyle="Italic"
FontSize="100" />
<TextBlock
Text="{Binding Path=LowerCase}"
HorizontalAlignment="Center"
Foreground="White"
FontStyle="Italic"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="1"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=LowerCase}"
Foreground="White"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontStyle="Italic"
FontSize="100" />
<TextBlock
Text="{Binding Path=LowerCase}"
HorizontalAlignment="Center"
Foreground="{StaticResource PhoneAccentBrush}"
FontStyle="Italic"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
</Grid>
</controls:PanoramaItem>
我知道在为 Windows Phone 编程时它不是很注重性能,但我们暂时不要这样。
全景图在电话页面的构造函数中填充了一个简单的循环,从字符代码“A”迭代到“Z”,创建适当的字母并将其添加到字母集合中。它工作得很好,但有点慢:我不得不等待大约 3 秒才能显示出来,这是不可接受的。
我对这个问题的第一个解决方案是将字母集合限制为 5 个字母,并在选择更改时编辑其中的 4 个。我尝试了几种方法,但基本上我的问题是在修改发生时更新 PanoramaItems。
从集合中删除和添加字母:破坏漂亮的过渡,没办法。 当包含的 Letter 的属性发生更改时,使集合触发 CollectionChanged:尝试过,和以前一样。 BindingExpression 的 UpdateTarget():该方法在 .NET CE 中似乎不可用。
也许我忽略了某些事情,或者只是遵循了完全不合适的方法。你会怎么做?
提前致谢!
【问题讨论】:
标签: wpf data-binding windows-phone-7