簡體   English   中英

在 longlistselector 模板中顯示/隱藏控件

[英]show/hide a control in a longlistselector template

我有一個 longlistselector 顯示應用程序中保存的一組運行。 保存的跑步距離可能以英里或公里為單位(取決於使用應用程序的文化),通常我將這兩者都存儲在模型中(以避免將 10 英里跑步變成 9.9999 英里跑步,這種情況在轉換所有時間)。

在我的 longlistselector 的 itemtemplate 中,我將簡單地在 xaml 中的模板中放入公制和英制字段,並在對頁面加載進行區域性檢查后隱藏無用的字段。

但是,我無法通過簡單地輸入它們的名稱來訪問這些文本塊。 智能感知沒有看到它們。 我假設因為這是一個模板。

是否可以從代碼隱藏中訪問 longlistselector itemtemplate 中的 xaml 定義的文本塊? 或者我應該在加載時在代碼中構建項目模板並優先放入正確的文本塊? (不喜歡這種方法,但我想我可以。)

我最初打算使用單獨的字段和轉換器來轉換距離並根據文化選擇單位,但這讓事情變得有點混亂。

Longlist 選擇器在 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>

您可以通過多種方式實現目標。

1) 如果您真的想按名稱訪問 DataTemplate 中的項目,那么您將需要VisualTreeHelper的幫助。

請參閱Jerry Nixon撰寫的如何訪問 XAML DataTemplate 中的命名控件(使用 CSharp),或者您可以直接搜索以從代碼隱藏中訪問 DataTemplate 項。

2) 您可以使用 ItemTemplate Selector,每個顯示設置一個。 請參見此處: LongListSelector 不同的項目模板

3) 或者您可以基本上將文本框的Visibility數據綁定到您的 ViewModel 中的轉換器類。 例如,如果“公里模式”,那么英里 TextBlock 的Visibility將是Collapsed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM