【发布时间】:2016-05-09 00:18:22
【问题描述】:
我有一个 longlistselector,它在应用程序中显示一组已保存的运行。保存的跑步距离可能以英里或公里为单位(取决于使用应用程序的文化),通常我将这两者都存储在模型中(以避免将 10 英里跑步变成 9.9999 英里跑步,这种情况在转换所有时间)。
在我的 longlistselector 的 itemtemplate 中,我将简单地在 xaml 的模板中输入公制和英制字段,并在对页面加载进行文化检查后隐藏无用的字段。
但是,我无法通过简单地输入它们的名称来访问这些文本块。 Intellisense 看不到它们。我假设是因为这是一个模板。
是否可以从代码隐藏中访问 longlistselector itemtemplate 中的 xaml 定义的文本块?或者我应该在加载时在代码中构建项目模板并优先放入正确的文本块? (不喜欢这种方法,但我想我可以。)
我原本打算使用单独的字段和转换器来转换距离并根据文化选择单位,但这些让事情变得有点混乱。
长列表选择器在 xaml 中如下所示:
<phone:LongListSelector x:Name="SavedRunsListSelector" Margin="0,0,-12,0" ItemsSource="{Binding SavedRuns}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,0">
<TextBlock Text="{Binding RunName}" Margin="0,0,0,-6"
TextWrapping="Wrap"
Style="{StaticResource PhoneTextLargeStyle}"
Foreground="{StaticResource PhoneAccentBrush}"/>
<!--<toolkit:WrapPanel Margin="0,-6,12,0" HorizontalAlignment="Stretch">-->
<TextBlock Text="{Binding RunDate, Converter={StaticResource ConverterRunDate}}"
TextWrapping="Wrap" HorizontalAlignment="Left"
Margin="0,0,0,0"
Style="{StaticResource PhoneTextSubtleStyle}"
Opacity="1"/>
<TextBlock Text="{Binding RunDistMiles, Converter={StaticResource ConverterDistanceMilesWholeString}}"
x:Name="textBlockSavedRunsListDistanceMiles"
TextWrapping="Wrap" Margin="0,-6,12,0"
Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding RunDistKm, Converter={StaticResource ConverterDistanceKmWholeString}}"
x:Name="textBlockSavedRunsListDistanceKm"
TextWrapping="Wrap" Margin="0,-6,12,0"
Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding RunTimeTotalSecs, Converter={StaticResource SecToTimeConverter}}"
TextWrapping="Wrap" Margin="0,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
【问题讨论】:
-
经过反思,最简单的方法可能是在 xaml 中构建 2 个模板,然后在检查文化信息后在代码中应用正确的模板。更多的 xaml(但主要是复制/粘贴)和更简单的后台代码。
标签: c# .net windows-phone-8 windows-phone-8.1