我希望通过名称控制Xamarin.form中的DataTemplete

时间:2017-04-05 02:46:58

标签: c# xaml xamarin.forms

rotate()

我像这样制作FlipView。

<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>

我在mainActivity中使用这个FlipVIew。

我想在mainActivity的c#中获得名为FlipImage的控件。 如果选中此图像,请添加功能。 如何在DataTemplete中获得控制权?

1 个答案:

答案 0 :(得分:0)

您无法通过数据模板中的名称访问任何控件。因为此数据模板中的每个项目都具有相同的名称,那么您需要哪个项目?

您可以通过在Visual树中找到它来完成。

使用样本:

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