2017-04-05 62 views
1
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:ctrls="clr-namespace:Xama_Test.Controls;assembly=Xama_Test" 
     x:Class="Xama_Test.FlipPage1"> 

    <StackLayout VerticalOptions="Center" HorizontalOptions="Center"> 

     <ctrls:Flip ItemsSource="{Binding Imgs}" HeightRequest="300" AutoPlay="True"> 
      <ctrls:Flip.ItemTemplate> 
       <DataTemplate x:Name="Dtmp"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition /> 
          <RowDefinition Height="30" /> 
         </Grid.RowDefinitions> 
         <Image x:Name="FlipImage" Source="{Binding Key}" Grid.RowSpan="2" Aspect="AspectFill" /> 
         <Label Text="{Binding Value}" Grid.Row="1" BackgroundColor="#333333" Opacity="0.5" TextColor="White" VerticalOptions="Center" /> 
        </Grid> 
       </DataTemplate> 
      </ctrls:Flip.ItemTemplate> 
     </ctrls:Flip> 
    </StackLayout> 
</ContentView> 

我使FlipView像這樣。我想通過名稱控制Xamarin中的DataTemplete.form

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:controls="clr-namespace:CarouselView.FormsPlugin.Abstractions;assembly=CarouselView.FormsPlugin.Abstractions"    
     xmlns:local="clr-namespace:Xama_Test" 
     x:Class="Xama_Test.Xama_Test" 
     Title="MainPage"> 
    <ScrollView x:Name="_LargeScroll" Orientation="Vertical"> 
     <StackLayout Orientation = "Vertical" x:Name="SLO" > 
      <local:FlipPage1 x:Name="FlipMenu" /> 
     </StackLayout> 
     </ScrollView> 
    </ContentPage> 

我在mainActivity中使用了這個FlipVIew。

我想在mainActivity的c#中獲得名爲FlipImage的控件。 並添加功能,如果選項卡此圖像。 我如何在DataTemplete中獲得控制權?

回答

0

您無法訪問數據模板中的任何名稱控制。由於此數據模板中的每個項目都具有相同的名稱,那麼您需要哪個項目?

您可以通過查找可視化樹來實現。

使用樣品:

private void SomeMethod() 
{ 
    ComboBox myCombo = GetVisualChild<ComboBox>(_contentPresenter); 
} 
private T GetVisualChild<T>(DependencyObject parent) where T : Visual 
{ 
    T child = default(T); 
    int numVisuals = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < numVisuals; i++) 
    { 
     Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); 
     child = v as T; 
     if (child == null) 
     { 
      child = GetVisualChild<T>(v); 
     } 
     if (child != null) 
     { 
      break; 
     } 
    } 
    return child; 
} 

來源:WPF How to access control from DataTemplate