【问题标题】:WPF: How to change button content (text) with a double click at runtimeWPF:如何在运行时通过双击更改按钮内容(文本)
【发布时间】:2011-10-30 22:21:36
【问题描述】:

我在 WPF 中有一个按钮,我想在双击它时更改文本,即我希望光标出现并键入要显示为内容的文本(类似于按 F2 时的行为在桌面快捷方式上)。

我想我可以检测到双击,然后显示一个具有透明背景的文本框,这将使我获得光标,在这个新文本框中键入文本,将其设置为按钮内容并删除文本框,但这并没有似乎不是正确的方法。


我想我的想法是,我正在开发一个使用形状的图表工具。由于形状不是从 ContentControl 派生的,我不能在其中放置文本框,我想模拟这种行为。我正在考虑制作一个自定义控件,但这可能工作量太大,而且对这个主题还不太熟悉。我想另一种方法是使用装饰器(可能是边框),因为它来自 contentcontrol,所以我可以做与 joe 建议的相同的事情。有什么想法吗?

我可以做的另一件事是将形状放在网格中,然后将文本框放在形状的顶部,但我不确定这将如何作为设计原则,我也不知道如果命中测试仅在形状或网格上。

【问题讨论】:

    标签: wpf button runtime double-click


    【解决方案1】:

    由于这是 WPF,您可以在 Button 中轻松放置一个 TextBox。如果您不希望文本框具有边框和白色背景 - 即,如果您希望它看起来像您只是直接在按钮中输入 - 那么您可以通过将 BorderWidth 设置为 0 并将 Background 设置为来删除它们透明。

    您可能想要做的是让您的 Button 的 Content 成为一个包含正常内容(可能是 TextBlock)和 TextBox 的 Grid,TextBox 最初是隐藏的(可见性 = Collapsed)。然后当您获得双击事件时,您将隐藏 TextBlock 并显示 TextBox。

    <Button>
        <Grid>
            <TextBlock Name="buttonText">Double-click to rename me</TextBlock>
            <TextBox Name="buttonEdit" Visibility="Collapsed" MinWidth="100"/>
        </Grid>
    </Button>
    

    【讨论】:

    • 谢谢乔。我想我的想法是,我正在开发一个使用形状的图表工具。由于形状不是从 ContentControl 派生的,我不能在其中放置文本框,我想模拟这种行为。我正在考虑制作一个自定义控件,但这可能工作量太大,而且对这个主题还不太熟悉。我想另一种方法是使用装饰器(可能是边框),因为它来自 contentcontrol,所以我可以用按钮做同样的事情。有什么想法吗?
    • 最简单的方法是为每个形状制作一个用户控件,用户控件上会有一个形状和一个(有时是隐藏的)文本框。 UserControl 是重量级的,所以如果你有数百个这样的控件就不能很好地扩展,但它是一种简单的入门方法。但根据 TextBox 的大小,显示它可能会导致您的 UserControl 调整大小。或者,您可以将 TextBox 放在一个装饰器中——然后您一次只能拥有一个。我从来没有真正使用过装饰器,所以我无能为力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2016-12-11
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多