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

WPF:如何在运行时双击更改按钮内容(文本),wpf,button,runtime,double-click,Wpf,Button,Runtime,Double Click,我在WPF中有一个按钮,我想在双击它时更改文本,也就是说,我希望光标出现并键入要显示为内容的文本(类似于在桌面快捷方式上按F2键时的行为) 我想我可以检测到双击,然后显示一个透明背景的文本框,这会让我看到光标,在这个新的文本框中键入文本,将其设置为按钮内容并删除文本框,但这似乎不是正确的方法 我想我的想法是,我正在开发一个使用形状的绘图工具。因为形状不是从ContentControl派生的,所以我不能在它里面放一个文本框,我想模拟这种行为。我正在考虑制作一个自定义控件,但这可能需要做太多的工作

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

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


我想我的想法是,我正在开发一个使用形状的绘图工具。因为形状不是从ContentControl派生的,所以我不能在它里面放一个文本框,我想模拟这种行为。我正在考虑制作一个自定义控件,但这可能需要做太多的工作,我还不太熟悉这个主题。我想另一种方法是使用装饰器(可能是边框),因为它来自contentcontrol,所以我可以像joe建议的那样做。有什么想法吗


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

因为这是WPF,所以您可以在按钮中放置文本框,而不会有任何问题。如果您不希望文本框有边框和白色背景,也就是说,如果您希望文本框看起来像是直接在按钮中键入的,那么可以通过将BorderWidth设置为0,将background设置为Transparent来删除它们

您可能想做的是让按钮的内容成为一个网格,其中包含普通内容(可能是一个文本块)和文本框,文本框最初是隐藏的(可见性=折叠)。然后,当您获得双击事件时,您将隐藏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,UserControl上会有一个形状和一个(有时是隐藏的)文本框。UserControl是重量级的,所以如果你有数百个这样的控件,它的伸缩性就不好,但这是一个简单的入门方法。但根据文本框的大小,显示文本框可能会导致用户控件调整大小。或者,您可以将文本框放在装饰器中,这样一次只能有一个装饰器。我从来没有真正使用过装饰物,所以我也没办法。