WPF: Как изменить содержимое кнопки (текст) двойным щелчком во время выполнения - PullRequest
3 голосов
/ 20 августа 2011

У меня есть кнопка в WPF, я хочу изменить текст, когда я дважды щелкаю по нему, то есть я хочу, чтобы появился курсор и набрал текст, который должен отображаться в качестве содержимого (поведение аналогично нажатию клавиши F2 на рабочем столе).

Полагаю, я мог бы обнаружить двойной щелчок, а затем отобразить текстовое поле с прозрачным фоном, на котором у меня будет курсор, ввести текст в этом новом текстовом поле, установить его для содержимого кнопок и удалить текстовое поле, но это не не кажется правильным способом сделать это.


Полагаю, я имел в виду, что я разрабатываю инструмент для построения диаграмм с использованием фигур. Поскольку форма не является производной от ContentControl, я не могу поместить в нее текстовое поле и хочу смоделировать это поведение. Я думал о создании пользовательского элемента управления, но это может быть слишком много работы для этого, и я еще не совсем знаком с этой темой. Я полагаю, что другим подходом было бы использовать рекламодателя (возможно, границу), и, поскольку это происходит из-за управления контентом, я могу сделать то же самое, что предложил Джо. есть идеи?

Еще одна вещь, которую я мог бы сделать, это поместить фигуру в сетку, а затем поместить текстовое поле поверх фигуры, но я не уверен, как это будет в качестве принципа дизайна, а также я не знаю, если тестирование попадания будет только на фигуре или сетке.

1 Ответ

1 голос
/ 20 августа 2011

Поскольку это WPF, вы можете без проблем поместить TextBox в кнопку.Если вы не хотите, чтобы текстовое поле имело рамку и белый фон, т. Е. Если вы хотите, чтобы оно выглядело так, как будто вы просто печатаете прямо на кнопке, то вы можете удалить их, установив для BorderWidth значение 0 и для Background значениеПрозрачный.

То, что вы, вероятно, захотите сделать, - это чтобы содержимое вашего Button было сеткой, содержащей как обычное содержимое (возможно, 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>
...