【问题标题】:Telerik RadComboBox Apply SelectionBoxTemplate OnLoad?Telerik RadComboBox 应用 SelectionBoxTemplate OnLoad?
【发布时间】:2015-01-12 12:39:09
【问题描述】:

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

<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 的正确文本:



请注意,我将 Textblock 的背景颜色设为蓝色,只是为了表明它不适用于初始加载。


理想情况下,它应该在加载时自动加载应用 SelectionBoxTemplate 并显示正确的信息,而不是单击然后单击远离多选组合框。此外,TextBlock 文本绑定到 RadComboBox 的文本,因为在后面的代码中我们设置了 RadComboBox 的文本。没有空值或之前没有设置文本的问题,因为我已经在调试模式下查看并且所有信息都在那里,直到框获得焦点才应用选择框模板。


在应用模板之前是否有某种事件必须触发,或者我是否可以强制在加载时应用模板?

【问题讨论】:

    标签: c# wpf xaml silverlight telerik


    【解决方案1】:

    我和你有同样的问题。我设法通过设置SelectedIndex="0" 来解决它
    我还读到SelectionBoxTemplate 仅在 RadComboBox 不可编辑时才有效:IsEditable="False"

    <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>
    

    【讨论】:

    • 这个问题是不久前的,但我没记错,我试过了,但它总是会检查第一个选项,在这种情况下,它是搜索的可选字段,因此用户不会没关系,总是要取消选中它。
    • @Max,对我来说这很好用。显示SelectionBoxTemplate 中定义的模板,与您的示例类似(只是一个文本块)。但是,我将此绑定到组合框的文本属性。我在 ItemSource 中的项目的 IsChecked 属性是可观察的,并处理更新组合框文本的更改事件。对我来说,如果没有选择项目,什么都不会显示。所以设置 SelectedIndex="0" 解决了这个问题,而无需更改 ItemSource 的任何 IsChecked 属性。
    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多