我想构建一个UserControl,我可以在其中绑定ItemsSource并显示Objects的缩略图集合。为了让它尽可能通用,我想接受没有任何类型的IEnumerable,并将Image Propertyname传递给usercontrol。
为此,我添加了两个DependencyPropertys(ItemsSource(IEnumerable
),BitmapImagePath(string
))。
<UserControl x:Class="UserControls.ThumbnailListControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
<UserControl.Resources>
<styles:SharedResourceDictionary>
<DataTemplate x:Key="DataItem">
<Image Source="{Binding}" />
</DataTemplate>
</styles:SharedResourceDictionary>
</UserControl.Resources>
<Grid>
<ItemsControl VerticalAlignment="Stretch"
ItemTemplate="{StaticResource DataItem}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type userControls:ThumbnailListControl}},
Path=ItemsSource}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</UserControl>
我不知道如何使用Binding归档到属性名称“BitmapImagePath”。一个可能的解决方案是在代码中使用反射,但我认为这不是优雅的解决方案。
在父UserControl中,我不想包含ThumbnailList
之类的内容
<ThumbnailListControl ItemsSource="MyItemsSource" BitmapImagePath="ThumbnailImage" />
答案 0 :(得分:0)
首先,为您的自定义UserControl命名:x:Name="MyUserControl"
。
然后在您的DataTemplate中简单地绑定到它的dependency-property:
...
<DataTemplate x:Key="DataItem">
<Image Source="{Binding ElementName=MyUserControl, Path=BitmapImagePath}" />
</DataTemplate>
...
答案取自:Binding UserControl to its own dependencyProperty doesn't work