我有一个longlistselector,它在应用程序中显示一组已保存的运行。保存的运行可能具有英里或公里的距离(取决于使用应用程序的文化),并且通常我将这两者都存储在模型中(以避免将10英里运行转换为9.9999英里运行,这在转换所有时间)。
在我的longlistselector的itemtemplate中,我将简单地在xaml中的模板中放入公制和英制字段,并在页面加载文化检查后隐藏无用的字段。
但是,我只能输入他们的名字,无法使用这些文本块。 Intellisense没有看到它们。我假设因为这是一个模板。
是否可以从代码隐藏中获取longlistselector itemtemplate中的xaml定义的文本块?或者我应该在加载时在代码中构建itemtemplate并优先将正确的文本块放入? (不是那种方法的粉丝,但我想我可以。)
我最初使用的是单独的字段和转换器,可以根据文化转换距离和选择单位,但这些使得事情变得有些混乱。
长名单选择器在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>
答案 0 :(得分:1)
有几种方法可以实现目标。
1)如果您确实想要按名称访问DataTemplate中的项目,那么您将需要VisualTreeHelper
的帮助。
请参阅How to access a named control inside a XAML DataTemplate (using CSharp) by Jerry Nixon,或者您可以通过代码隐藏来访问DataTemplate项目。
2)您可以使用ItemTemplate选择器,每个显示设置一个。见这里:LongListSelector different item template
3)或者你可以基本上将文本框的Visibility
数据绑定到ViewModel中的转换器类。例如,如果“Km模式”,那么英里TextBlock的Visibility
将为Collapsed
。