.net “可点击”文本块?

o4hqfura  于 2023-02-26  发布在  .NET
关注(0)|答案(8)|浏览(158)

我有一个WP7应用程序,我希望有一个“可点击”的TextBlock区域,当用户点击TextBlock时,它会将其置于编辑模式(一个不同的控件)。
TextBlock没有单击事件(这并不令我感到惊讶)。
有什么方法可以做到这一点吗? Package 在另一个控件中,或类似的东西?

pjngdqdw

pjngdqdw1#

是的,有一个点击事件,叫做鼠标左键按下

textBlock1.MouseLeftButtonDown +=new MouseButtonEventHandler(textBlock1_MouseLeftButtonDown);

private void textBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

}
pkbketx9

pkbketx92#

我已经解决了这个问题,通过创建一个按钮与TextBlock内的模板如下:

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

这是一个有点多的标记,但你不需要写任何代码,它是由框架提供的,并正常工作。

irtuqstp

irtuqstp3#

您可以使用手势支持关联单击事件。

**编辑:**通过这种方式,您的行为将与用户在操作过程中在显示屏上移动手指的单击(点击)一致。在鼠标按下、移开控制、鼠标抬起的情况下,单击将不会触发。点击手势的工作原理相同。并非所有用户都知道他们可以通过移动鼠标/手指来中止单击,但有些用户知道,如果处理不当,您将陷入这种情况。MouseLeftButtonUp处理的工作原理相同,但我不建议依赖于此,因为它不是设计的,可能会有意外的变化或与其他控件冲突。

wyyhbhjk

wyyhbhjk4#

有几个答案建议使用MouseLeftButton事件,但我看到了很多例子,这种方法是错误的。我建议把文本块(或其他控件)到一个按钮与自定义样式(删除所有边框/边距,除了内容控制)。这是好得多!

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

uz75evzq5#

另一种方法是使用Seva的解决方案,但添加更多的内容,这样滚动就不会触发“点击”

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 );
     }
}
hs1rzwqc

hs1rzwqc6#

听起来你只需要一个按钮。更改控件模板以删除边框样式等,并创建自己的(或清除现有的)视觉状态。或者甚至编辑它,使“凹陷”状态提供一点3D投影。
此外,如果使用MVVM,还可以使用按钮上的命令。
路加

xzv2uavs

xzv2uavs7#

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;
    }

我更喜欢添加一个事件,然后动态地完成其余的工作。

qvsjd97n

qvsjd97n8#

可以使用PointerReleased完成UWP控件的捕捉点击事件

相关问题