C# Telerik RadComboBox应用选择框模板是否已加载?

C# Telerik RadComboBox应用选择框模板是否已加载?,c#,wpf,xaml,silverlight,telerik,C#,Wpf,Xaml,Silverlight,Telerik,基本上,我们使用Telerik的RadComboBox和SelectionBoxTemplate创建了自己的自定义MultiSelect组合框,以便在选择多个项目时显示自定义文本 <ucControls:MultiSelectComboBoxBase ... > <ucControls:RadComboBox x:Name="RadCombo" Text="" Height="22" HorizontalContentAlignment="

基本上,我们使用Telerik的RadComboBox和SelectionBoxTemplate创建了自己的自定义MultiSelect组合框,以便在选择多个项目时显示自定义文本

<ucControls:MultiSelectComboBoxBase
  ... >

<ucControls:RadComboBox
    x:Name="RadCombo"
    Text=""
    Height="22"
    HorizontalContentAlignment="Left"
    HorizontalAlignment="Stretch"
    DropDownClosed="RadCombo_DropDownClosed"
    IsTextSearchEnabled="False"
    IsEnabled="{Binding IsEnabled}"
    CanAutocompleteSelectItems="False"
    CanKeyboardNavigationSelectItems="False"
    LostFocus="RadCombo_LostFocus">

    <ucControls:RadComboBox.SelectionBoxTemplate>
        <DataTemplate>
            <Grid Background="Aqua">
                <TextBlock x:Name="ComboBoxDisplay" Text="{Binding Text, ElementName=RadCombo}" />
            </Grid>
        </DataTemplate>
    </ucControls:RadComboBox.SelectionBoxTemplate>

    <ucControls:RadComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <CheckBox x:Name="chkBox"
                          Content="{Binding ItemValue}"
                          Tag="{Binding ItemID}"
                          Height="16" Margin="2"
                          IsChecked="{Binding IsChecked, Mode=TwoWay}"
                          Visibility="{Binding IsSelectAllItem, Converter={StaticResource booleanToVisibilityConverter}, ConverterParameter=NOT}"
                          HorizontalAlignment="Stretch" VerticalAlignment="Top"
                          Checked="ChkBox_Checked" Unchecked="ChkBox_Unchecked"
                          IsEnabled="{Binding IsEnabled, Mode=TwoWay}"/>

                <HyperlinkButton
                    VerticalAlignment="Center" Content="{Binding ItemValue}"
                    Visibility="{Binding IsSelectAllItem, Converter={StaticResource booleanToVisibilityConverter}}"
                    Style="{StaticResource HyperlinkButtonNoBorderStyle}" Margin="3,2,0,0"
                    Click="HyperlinkButton_Click"
                    IsEnabled="{Binding IsEnabled, Mode=TwoWay}" />
            </StackPanel>
        </DataTemplate>
    </ucControls:RadComboBox.ItemTemplate>
</ucControls:RadComboBox>

它工作得很好,但唯一的问题是,在加载radcombobox时,SelectionBoxTemplate似乎没有实际应用。它仅在单击框时适用。

加载框时显示:


然后单击并显示下拉列表:

然后单击,它会显示SelectionBoxTemplate中的正确文本:




注意,我将文本块的背景颜色设为蓝色,只是为了表明它在初始加载时不适用。


理想情况下,当它加载时,应该自动应用SelectionBoxTemplate并显示正确的信息,而不是单击然后从multiselectcombobox中单击。此外,TextBlock文本绑定到RadComboBox的文本,因为在后面的代码中,我们设置了RadComboBox的文本。以前没有设置空值或文本没有问题,因为我在调试模式下查看过,所有信息都在那里,选择框模板只是在框接收到焦点后才应用


在应用模板之前,是否有某种类型的事件必须触发,或者是否有某种方法可以强制将模板应用到加载上?

我遇到了与您相同的问题。我通过设置
SelectedIndex=“0”

解决了这个问题 我还了解到,
SelectionBoxTemplate
仅在RadComboBox不可编辑时有效:
IsEditable=“False”


...

这个问题是很久以前的事了,但我记得我正确地尝试过,但是这总是会选中第一个选项,在这种情况下,它是搜索的可选字段,因此用户不必总是取消选中它。@Max,对我来说这很好。将显示在
SelectionBoxTemplate
中定义的模板,该模板与示例中的模板类似(只是一个文本块)。然而,我将其绑定到组合框的文本peropery。ItemSource中my items的
IsChecked
属性是可观察的,并处理更新组合框文本的已更改事件。对于我来说,如果没有选择项目,则不会显示任何内容。因此,设置SelectedIndex=“0”解决了在不更改任何
的情况下检查ItemSource的属性的问题。
<ucControls:RadComboBox
    x:Name="RadCombo"
    SelectedIndex="0"
    IsEditable="False"
    Height="22"
    HorizontalContentAlignment="Left"
    HorizontalAlignment="Stretch"
    DropDownClosed="RadCombo_DropDownClosed"
    IsEnabled="{Binding IsEnabled}"
    LostFocus="RadCombo_LostFocus">
...
</ucControls:RadComboBox>