WPF:如何在运行时双击更改按钮内容(文本)

3

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

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


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

我可以做的另一件事是将形状放入网格中,然后将文本框放在形状上方,但我不确定这是否符合设计原则,而且我不知道命中测试只会在形状或网格上进行。

1个回答

1

由于这是WPF,您可以毫不费力地在按钮内放置一个文本框。如果您不希望文本框有边框和白色背景-即,如果您希望它看起来像直接输入到按钮中-那么您可以通过将BorderWidth设置为0并将Background设置为Transparent来去除它们。

您可能想要做的是让按钮的内容成为包含正常内容(可能是TextBlock)和TextBox的网格,其中TextBox最初处于隐藏状态(Visibility = Collapsed)。然后,当您双击事件时,您将隐藏TextBlock并显示TextBox。

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

谢谢Joe。我想我心里所想的是,我正在使用形状开发一个图形工具。由于形状不是从ContentControl派生出来的,所以我无法在其中放置文本框,并且我想模拟这种行为。我考虑制作一个自定义控件,但这可能对此来说太麻烦了,而且我对这个主题还不太熟悉。我想另一种方法是使用装饰器(可能是边框),因为它是从contentcontrol派生出来的,所以我可以像你说的按钮那样做同样的事情。有什么想法吗? - mihajlv
最简单的方法是为每个形状创建一个UserControl,该UserControl将具有一个形状和一个(有时隐藏的)TextBox。UserControl很重,如果你有数百个这样的控件,它不会很好地扩展,但这是一个开始的简单方法。但是,根据TextBox的大小,显示它可能会导致您的UserControl重新调整大小。或者,您可以将TextBox放在adorner中--然后您一次只能有一个。我从未实际使用过adorner,所以无法提供帮助。 - Joe White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接