У меня есть longlistselector, который показывает набор сохраненных прогонов в приложении. Сохраненные прогоны могут иметь расстояния в километрах или километрах (в зависимости от культуры, в которой используется приложение), и в целом я храню оба эти файла в модели (чтобы не превращать 10-мильные пробеги в 9,9999 мили пробега, которые происходят при преобразовании всех время).показать/скрыть элемент управления в шаблоне longlistselector
В моем элементе itemtemplate для моего longlistselector я собирался просто помещать как метрические, так и имперские поля в шаблон в xaml и скрывать ненужные после проверки культуры загрузки страницы.
Я не могу добраться до этих текстовых блоков, просто набрав их имена. Intellisense их не видит. Я предполагаю, что это шаблон.
Можно ли получить текстовые блоки, определенные в xaml, в элементе longlistselector itemtemplate из кода? Или я должен построить 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>
При отражении проще всего создать 2 шаблона в xaml и просто применить правильный код в коде после проверки информации о культуре. Больше xaml (но в основном копирование/вставка) и гораздо более простой код в фоновом режиме. – WPNoviceCoder