我刚刚开始学习附加属性,看起来这可能会打开一个关于自定义UserControl
可重用性的全新视角。
我希望设计一个简单的ComboBox
控件,其中包含文本旁边的图像。我的UserControl包含ComboBox
ItemTemplate
TextBlock
Image
和<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="30"
Height="30"
Margin="0"
Source="{Binding ???}"
VerticalAlignment="Center"/>
<TextBlock Margin="5"
Text="{Binding ???}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
:
ItemsSource
ComboBox
的{{1}}将是任何对象。我可以通过ItemsSource
公开DependencyProperty
而没有问题,但后来我不知道如何告诉DataTemplate
ComboBox
ItemSource
绑定的哪些属性要将TextBlock
和Image
绑定到。
以下是我的控件的示例用法:
<customControls:ImageComboBox HorizontalAlignment="Left"
Margin="24,197,0,0"
VerticalAlignment="Top"
Width="142"
Height="46"
ComboBoxHint="Country"
ComboBoxItemsSource="{Binding CountryCollection}"
ComboBoxSelectedValue="{Binding SelectedCountry}"/>
答案 0 :(得分:-1)
这取决于要设置为ItemsSource的集合中的项类型。比方说,类型是以下类。
public class CountryViewModel
{
public BitmapImage Flag { get; set; }
public string Name { get; set; }
}
然后相应的DataTemplate将如下;
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="30" Height="30" Margin="0"
VerticalAlignment="Center"
Source="{Binding Flag}"/>
<TextBlock Margin="5"
Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
顺便说一下,正如Clemens所指出的,你不一定需要从头开始创建一个ComboBox。这是一个非常复杂的控制。您可以通过模板自定义其大部分外观。