gpt4 book ai didi

c# - 如何在 FlipView 中访问 DataTemplate 中的 xaml 控件

转载 作者:行者123 更新时间:2023-12-02 05:29:01 26 4
gpt4 key购买 nike

我想访问 C# 代码中的“图像”元素。我知道我不能直接访问它,因为它在数据模板中。我已经尝试过视觉树,但仍然无法在代码中获得“图像”控制元素。

<FlipView
x:Name="flipView"
AutomationProperties.AutomationId="ItemsFlipView"
AutomationProperties.Name="Item Details"
TabIndex="1"
Grid.RowSpan="2"
ItemsSource="{Binding Source={StaticResource itemsViewSource}}" SelectionChanged="flipView_SelectionChanged">

<FlipView.ItemContainerStyle>
<Style TargetType="FlipViewItem">
<Setter Property="Margin" Value="0,137,0,0"/>
</Style>
</FlipView.ItemContainerStyle>

<FlipView.ItemTemplate>
<DataTemplate>

<!--
UserControl chosen as the templated item because it supports visual state management
Loaded/unloaded events explicitly subscribe to view state updates from the page
-->
<UserControl Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates">
<ScrollViewer x:Name="scrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" Grid.Row="1">

<!-- Content is allowed to flow across as many columns as needed -->
<common:RichTextColumns x:Name="richTextColumns" Margin="117,0,117,47">
<RichTextBlock x:Name="richTextBlock" Width="560" Style="{StaticResource ItemRichTextStyle}" IsTextSelectionEnabled="False">
<Paragraph>
<Run FontSize="26.667" FontWeight="Light" Text="{Binding Title}"/>
<LineBreak/>
<LineBreak/>
<Run FontWeight="Normal" Text="{Binding Subtitle}"/>
</Paragraph>
<Paragraph LineStackingStrategy="MaxHeight">
<InlineUIContainer>
<Image x:Name="image" MaxHeight="480" Margin="0,20,0,10" Stretch="Uniform" Source="{Binding Image}" AutomationProperties.Name="{Binding Title}"/>
</InlineUIContainer>
</Paragraph>
</RichTextBlock>
</common:RichTextColumns>
</ScrollViewer>
</UserControl>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>

最佳答案

我已经尝试过,并且能够按照您的描述访问 FlipView DataTemplate 内部的控件。尝试以下方法,如果有帮助请告诉我。

public static IEnumerable<T> RecurseChildren<T>(DependencyObject root) where T : UIElement
{
if (root is T)
{
yield return root as T;
}

if (root != null)
{
var count = VisualTreeHelper.GetChildrenCount(root);


for (var idx = 0; idx < count; idx++)
{
foreach (var child in RecurseChildren<T>(VisualTreeHelper.GetChild(root, idx)))
{
yield return child;
}
}
}
}

访问图像控件:

var imageControl = RecurseChildren<Image>(rootVisual).FirstOrDefault();

这里的 rootVisual 是我页面中的 Grid 实例。

关于c# - 如何在 FlipView 中访问 DataTemplate 中的 xaml 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com