如何在C#编码中访问页面资源元素?我在XAML中有以下代码。我想访问我的C#代码中的image
元素,但它无法访问。
<Page.Resources>
<DataTemplate x:Key="Standard250x250ItemTemplate">
<Grid HorizontalAlignment="Left" Width="150" Height="150">
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image x:Name="image" Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}" />
</Border>
</Grid>
</DataTemplate>
答案 0 :(得分:1)
无法访问它,因为DataTemplate资源在加载之前不会被实例化。你需要做这样的事情来加载它:
var dataTemplate = (DataTemplate)this.Resources["Standard250x250ItemTemplate"];
var grid = dataTemplate.LoadContent();
然后遍历元素树以获取图像。
在许多情况下,更好的方法是定义附加的依赖项属性或附加行为,您可以将其附加到XAML中的Image,并编写与相关图像相关的代码。
答案 1 :(得分:0)
这取决于您何时尝试访问它。如果尝试访问已经渲染的元素的图像控件,那么可以像这样使用ItemContainerGenerator:
//assumes using a ListView
var item = (ListViewItem)listView.ItemContainerGenerator.ContainerFromItem(myModel);
// traverse children
var image = GetChildOfType<Image>(item);
// use the image!
private T GetChildOfType<T>(DependencyObject obj)
{
for(int i = 0; i< VisualTreeHelper.GetChildrenCount(obj); i++)
{
var child = VisualTreeHelper.GetChild(obj, i);
if(child is T) return child as T;
T item = GetChildOfType<T>(child);
if(item != null) return item;
}
return null;
}
如果您需要更改图像的属性,那么也可以通过绑定来完成。