直接:
Xaml部分代碼:
<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="Telerik.Sample.AutoComplete" 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" xmlns:common ="clr-namespace:Common.Silverlight;assembly=Common.Silverlight" xmlns:bo ="clr-namespace:BusinessObject;assembly=BusinessObject" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <Grid.Resources> <common:ObjectCollection x:Key="objCollection"> <bo:NodeItem Text="上海" Value="SH" Description="上海是一個繁華的都市"></bo:NodeItem> <bo:NodeItem Text="深圳" Value="SZ" Description="中國的特區"></bo:NodeItem> <bo:NodeItem Text="廣州" Value="GZ" Description="廣東人很喜歡煲湯"></bo:NodeItem> <bo:NodeItem Text="北京" Value="BJ" Description="北京是中國的首都"></bo:NodeItem> </common:ObjectCollection> <!--資料項目模板--> <DataTemplate x:Key="cboItemTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Text="{Binding Value}" Grid.Column="0" TextAlignment="Left" ></TextBlock> <TextBlock Text="{Binding Text}" Grid.Column="1" TextAlignment="Right"></TextBlock> </Grid> </DataTemplate> <!--選中時的模板(IsEditable=True時失效)--> <DataTemplate x:Key="cboSelectionBoxTemplate"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Text}" Foreground="Red"/> <TextBlock Margin="3,0,3,0">/</TextBlock> <TextBlock Text="{Binding Value}"></TextBlock> </StackPanel> </DataTemplate> </Grid.Resources> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock>SelectedValue:</TextBlock> <telerik:RadMaskedTextBox MaskedText="{Binding ElementName=radComboBox1, Path=SelectedValue, Mode=TwoWay}" MaskType="None" IsReadOnly="True"></telerik:RadMaskedTextBox> <TextBlock Margin="0,10,0,0">SelectedItem.Value:</TextBlock> <telerik:RadMaskedTextBox MaskedText="{Binding ElementName=radComboBox1, Path=SelectedItem.Value, Mode=TwoWay}" MaskType="None" IsReadOnly="True"></telerik:RadMaskedTextBox> <TextBlock Margin="0,10,0,0">SelectedItem.Description:</TextBlock> <telerik:RadMaskedTextBox MaskedText="{Binding ElementName=radComboBox1, Path=SelectedItem.Description, Mode=TwoWay}" MaskType="None" IsReadOnly="True"></telerik:RadMaskedTextBox> <TextBlock Margin="0,10,0,0">SelectedItem.Text:</TextBlock> <telerik:RadMaskedTextBox MaskedText="{Binding ElementName=radComboBox1, Path=SelectedItem.Text, Mode=TwoWay}" MaskType="None" IsReadOnly="True"></telerik:RadMaskedTextBox> <!--說明--> <!--TextSearchMode="Contains" 表明:文本搜尋時,只要包含關鍵字即認為匹配--> <!--telerik:TextSearch.TextPath="Value" 表明:搜尋僅匹配Value屬性--> <!--IsEditable="True" 允許編輯--> <!--IsFilteringEnabled="True" 搜尋匹配時,自動過濾記錄項--> <!--OpenDropDownOnFocus="True" 獲得焦點時,自動延伸--> <!--ItemTemplate="{StaticResource cboItemTemplate}" 資料項目模板--> <!--ItemsSource="{StaticResource objCollection}" 資料來源--> <!--SelectedValuePath="Text" 選中值對應的實體欄位--> <!--EmptyText="請選擇城市" 無選擇時顯示的預設文本--> <!--ClearSelectionButtonContent="清空選擇" 清空選擇按鈕的文本--> <!--ClearSelectionButtonVisibility="Visible" 顯示清空選擇按鈕--> <telerik:RadComboBox Margin="0,10,0,0" x:Name="radComboBox1" Width="180" TextSearchMode="Contains" telerik:TextSearch.TextPath="Value" IsEditable="False" IsFilteringEnabled="False" OpenDropDownOnFocus="True" ItemTemplate="{StaticResource cboItemTemplate}" ItemsSource="{StaticResource objCollection}" SelectedValuePath="Text" ClearSelectionButtonContent="清空選擇" ClearSelectionButtonVisibility="Visible" EmptyText="請選擇城市(鍵入拼音簡稱即可)" SelectionBoxTemplate="{StaticResource cboSelectionBoxTemplate}" /> </StackPanel> </Grid></UserControl>
後台代碼:木有,Binding的優勢再一次得到體現:)
RadComboBox在我看來有一個小小的缺憾:當設定為可編輯模式時(IsEditable="True"),選中項的模板(SelectionBoxTemplate)會失效(有一個近似hack的解決辦法:重寫ToString()方法,輸出自己希望的結果)