首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Silverlight RadComboBox使整个文本框区域可点击

Silverlight RadComboBox使整个文本框区域可点击
EN

Stack Overflow用户
提问于 2014-10-06 22:29:29
回答 2查看 281关注 0票数 1

是否有可能使RadComboBox的整个文本区域在拥有IsEditable=true和ReadOnly=True时可点击?

我只是将IsEditable = false设置为false,但不幸的是,我需要它是可编辑的,以便在选定某些内容时显示自定义文本(我已经设置了它,以便可以选择多个内容并显示所选项的列表)。如果禁用IsEditable,则会丢失.Text属性,无法设置自定义文本。

我最好的两个选择是:

代码语言:javascript
运行
复制
    1) somehow apply a style that makes the whole textbar clickable and not just the arrow
代码语言:javascript
运行
复制
   2) somehow apply custom text display when IsEditable is set to false.

不幸的是,我也不知道该怎么做,所以任何帮助都会很好。谢谢

编辑:这很理想,只是我们使用的是Silverlight,而不是ASP.net http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/checkboxes/defaultcs.aspx

这可能更现实,只是为了让文本区域可以点击,从而打开下拉菜单。就像右边的ComboBox,减去能够输入。

http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/comboboxvsdropdownlist/defaultcs.aspx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-10 23:42:01

最后我找到了一个其他人在这里实现的multiselectcombobox:

http://www.telerik.com/support/code-library/a-multiselect-combobox

我不需要整个组合框本身,因为我们已经实现了一个组合框,所以我只查看了当组合框IsEditable设置为false时,这个人是如何显示自定义消息的。

在看了一段时间的代码之后,我看到了如何使它对我自己起作用,我把

<ucControls:RadComboBox.SelectionBoxTemplate> <DataTemplate> <TextBlock Text="{Binding Text,ElementName=RadCombo}" /> </DataTemplate> </ucControls:RadComboBox.SelectionBoxTemplate>

在我们自己定制的MultiSelectComboBox的XAML内部。(RadCombo是我希望将文本链接到的特定控件的名称)

代码语言:javascript
运行
复制
<ucControls:RadComboBox
    x:Name="RadCombo"
    Text=""
    ........

<ucControls:RadComboBox.SelectionBoxTemplate> <DataTemplate> <TextBlock Text="{Binding Text,ElementName=RadCombo}" /> </DataTemplate> </ucControls:RadComboBox.SelectionBoxTemplate>

代码语言:javascript
运行
复制
    .......
</ucControls:RadComboBox>

使用内置的SelectionBoxTemplate,这基本上只是添加了一个TextBlock覆盖,内容被绑定到RadComboBox自己的文本,所以当我们设置RadComboBox的文本时,TextBlock会更新自己。

这是我们最有效的方法,因为它需要最少的代码更改,并且没有结构更改,因为我们已经准备好了用于复选框和设置自定义文本的所有代码。

希望这能帮到别人,祝你好运!

票数 0
EN

Stack Overflow用户

发布于 2014-10-07 10:16:19

我能想到几个解决方案,不同的优雅。这里有一个可能适合于缩小箭头按钮和文本输入区域之间的差距。现在我想了想..。也许您可以通过OpenDropDownOnFocus属性来消除这种非常难闻和脆弱的副作用(一旦单击不会改变焦点所有者,该属性就会中断)。

MouseLeftButtonDown单击处理程序注册到RadComboBox,您可以选择获取所有事件,而不仅仅是未处理的事件。然后我们可以从那里切换DropDown。但是我们不想干扰箭头按钮,因此我们检查鼠标点击的来源。

代码语言:javascript
运行
复制
public class MyView : UserControl
{
    public MyView()
    {
        InitializeComponent();
        MouseButtonEventHandler handler = OnComboBoxClicked;
        radComboBox.AddHandler( UIElement.MouseLeftButtonDownEvent, handler,
            handledEventsToo: true );
    }

    private void OnComboBoxClicked( object sender, MouseButtonEventArgs args )
    {
        if (!args.Handled ||
            !args.IsRoutedEventFromToggleButton(
                togglebuttonAncestorToStopTheSearch: (UIElement) sender))
        {
            ToggleDropDown();
        }
    }
}

以及易于使用的扩展方法:

代码语言:javascript
运行
复制
public static class ControlExtensions
{
    public static bool IsRoutedEventFromToggleButton(
        this RoutedEventArgs args,
        UIElement togglebuttonAncestorToStopTheSearch )
    {
        ToggleButton toggleButton = ((UIElement) args.OriginalSource)
            .GetAncestor<ToggleButton>( togglebuttonAncestorToStopTheSearch );
        return toggleButton != null;
    }

    public static TAncestor GetAncestor<TAncestor>(
        this DependencyObject subElement,
        UIElement potentialAncestorToStopTheSearch )
        where TAncestor : DependencyObject
    {
        DependencyObject parent;
        for (DependencyObject subControl = subElement; subControl != null;
             subControl = parent)
        {
            if (subControl is TAncestor) return (TAncestor) subControl;

            if (object.ReferenceEquals( subControl,
                potentialAncestorToStopTheSearch )) return null;


            parent = VisualTreeHelper.GetParent( subControl );
            if (parent == null)
            {
                FrameworkElement element = subControl as FrameworkElement;
                if (element != null)
                {
                    parent = element.Parent;
                }
            }
        }
        return null;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26225869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档