Подтвердить что ты не робот

"Clickable" textblock?

У меня есть приложение WP7, где я бы хотел иметь "clickable" TextBlock область, которая, когда пользователь нажимает на TextBlock, помещает ее в режим редактирования (другой элемент управления). Это добавит еще один явный шаг для пользователя перед редактированием текста.

Нет события click для TextBlock (что меня не удивляет).

Есть ли способ сделать это? Обернуто в другой элемент управления или что-то подобное?

4b9b3361

Ответ 1

Да, есть событие click. Его имя MouseLeftButtonDown

textBlock1.MouseLeftButtonDown +=new MouseButtonEventHandler(textBlock1_MouseLeftButtonDown);

private void textBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

}

Ответ 2

Я решил это, создав кнопку с TextBlock внутри своего шаблона следующим образом:

<Button Click="button_Click">
    <Button.Template>
        <ControlTemplate>
            <TextBlock ... />
        </ControlTemplate>
    </Button.Template>
</Button>

Это немного больше разметки, но вам не нужно писать какой-либо код, он предоставляется каркасом и работает правильно.

Ответ 3

Вы можете связать событие click с помощью поддержки жестов.

изменить:, делая это таким образом, чтобы ваше поведение было согласовано с нажатием кнопки (нажмите) в отношении пользователя, перемещающего палец по экрану во время операции. Щелчок не будет срабатывать под mousedown, отключить управление, mouseup. Жест жеста работает одинаково. Не все пользователи знают, что они могут прервать щелчок, перемещая мышь/палец, но некоторые делают, и вы поймаете это, если не будете правильно его обрабатывать. Обработка MouseLeftButtonUp работает одинаково, но я бы не рекомендовал полагаться на это, поскольку это не по дизайну, и могут быть непредвиденные изменения или конфликты с другими элементами управления.

Ответ 4

Есть несколько ответов, которые советуют использовать события MouseLeftButton, но я видел много примеров, когда этот подход идет не так. Я рекомендую разместить TextBlock (или другие элементы управления/элементы управления) в Button с пользовательским стилем (удалены все границы/поля, кроме управления содержимым). Это МНОГО ЛУЧШЕ!

 <Button Style={StaticResource OnlyContentStyle}>
      <Button.Content>
           <TextBlock />
      </Button.Content>
 </Button>

Ответ 5

Другой способ сделать это - использовать решение Seva, но добавив немного больше, поэтому прокрутка не приведет к запуску 'Click'

bool _IsMouseDown = false;

private void Textblock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    _IsMouseDown = true;
}

private void Textblock_MouseLeave(object sender, MouseEventArgs e)
{
    _IsMouseDown = false;
}

private void Textblock_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (_IsMouseDown)
    {
        _IsMouseDown = false;

        //ITS a CLick do something!
        Textblock clickedButton = (Textblock)sender;
        AddNumberToRolledNumbers(Convert.ToInt32(clickedButton.Tag),clickedButton.Background );
     }
}

Ответ 6

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

Кроме того, с помощью кнопки вы также можете использовать команду на кнопке, если вы используете MVVM.

Лука

Ответ 7

private void txtPersonName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var txtPersonName = e.OriginalSource as TextBlock;

        if (txtPersonName == null) return;

        MouseButtonEventHandler eveMouseLeftButtonUp = (sen, eve) => NavigationService.Navigate(new Uri("/Views/PersonPage.xaml?personId=" + txtPersonName.Tag, UriKind.RelativeOrAbsolute));
        MouseEventHandler eveMouseMove = (sen, eve) => txtPersonName.MouseLeftButtonUp -= eveMouseLeftButtonUp;

        txtPersonName.MouseLeftButtonUp += eveMouseLeftButtonUp;
        txtPersonName.MouseMove += eveMouseMove;
    }

Я предпочитаю добавлять одно событие и делать все остальное динамически.