繁体   English   中英

在DataTemplate中获取控制

[英]Get control inside DataTemplate

因此,我通过以下代码在xaml中定义了一个FlipView:

<FlipView x:Name="carrousel" Height="175" Background="Transparent" Margin="0,20,0,0">
    <FlipView.ItemTemplate>
        <DataTemplate>
            <Grid>
              <Rectangle x:Name="profile" Stroke="White" StrokeThickness="0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="175" Height="175" Canvas.ZIndex="1" RadiusX="88" RadiusY="88" Tapped="profile_Tapped"/>
            </Grid>
        </DataTemplate>
    </FlipView.ItemTemplate>
</FlipView>

当用户单击矩形时,它的动画会变大,但是我也希望其他所有FlipViewItem的所有其他矩形也能更改大小。 我该如何实现? 我试过了:

foreach(FlipViewItem fvi in carrousel.Items)
{
    Rectangle g = (fvi.Content as Grid).FindName("profile") as Rectangle;
    g.Width = double;
    g.Height = double;
}

但是看到我的flipview不包含FlipViewItems,而是我绑定到了它的自定义类(显然没有.Content),所以它不起作用。 我该如何工作?

此解决方案是一种周转解决方案(因为我无法管理相对绑定)。

<Grid Background="{ThemeResource SystemControlBackgroundListMediumBrush}">
    <StackPanel Margin="100,10,10,10">
        <FlipView x:Name="carrousel" Height="350" Width="350" Background="Red" Margin="0,20,0,0">
            <FlipView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Rectangle x:Name="profile" Stroke="White" StrokeThickness="1" Fill="Aqua"
                                   HorizontalAlignment="Center" VerticalAlignment="Center" 
                                   Width="{Binding ElementName=RefValueRect, Path=Width, Mode=OneWay}" 
                                   Height="{Binding ElementName=RefValueRect, Path=Height, Mode=OneWay}" Canvas.ZIndex="1" RadiusX="88" 
                                   RadiusY="88" Tapped="profile_Tapped"/>
                    </Grid>
                </DataTemplate>
            </FlipView.ItemTemplate>
        </FlipView>
    </StackPanel>
    <Rectangle x:Name="RefValueRect" Width="175" Height="175" Visibility="Collapsed" />
</Grid>

背后的代码

private void profile_Tapped(object sender, TappedRoutedEventArgs e)
{
    RefValueRect.Width *= 2;
    RefValueRect.Height *= 2;
}
foreach(var fvi in carrousel.Items)
{
FlipViewItem item=carrousel.ContainerFromItem(fvi);
var rectangle =FindElementInVisualTree<Rectangle>(item);



//Or without VisualTreeHelper you can do like what were you trying before 
Rectangle g = (item.Content as Grid).FindName("profile") as Rectangle;
g.Width = double;
g.Height = double;
}

    private T FindElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
            {
                var count = VisualTreeHelper.GetChildrenCount(parentElement);
                if (count == 0) return null;

                for (int i = 0; i < count; i++)
                {
                    var child = VisualTreeHelper.GetChild(parentElement, i);
                    if (child != null && child is T)
                        return (T)child;
                    else
                    {
                        var result = FindElementInVisualTree<T>(child);
                        if (result != null)
                            return result;
                    }
                }
                return null;
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM