我有一个WP7应用程序,我希望有一个“可点击”的TextBlock区域,当用户点击TextBlock时,它会将其置于编辑模式(一个不同的控件)。TextBlock没有单击事件(这并不令我感到惊讶)。有什么方法可以做到这一点吗? Package 在另一个控件中,或类似的东西?
TextBlock
pjngdqdw1#
是的,有一个点击事件,叫做鼠标左键按下
textBlock1.MouseLeftButtonDown +=new MouseButtonEventHandler(textBlock1_MouseLeftButtonDown); private void textBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { }
pkbketx92#
我已经解决了这个问题,通过创建一个按钮与TextBlock内的模板如下:
<Button Click="button_Click"> <Button.Template> <ControlTemplate> <TextBlock ... /> </ControlTemplate> </Button.Template> </Button>
这是一个有点多的标记,但你不需要写任何代码,它是由框架提供的,并正常工作。
irtuqstp3#
您可以使用手势支持关联单击事件。
**编辑:**通过这种方式,您的行为将与用户在操作过程中在显示屏上移动手指的单击(点击)一致。在鼠标按下、移开控制、鼠标抬起的情况下,单击将不会触发。点击手势的工作原理相同。并非所有用户都知道他们可以通过移动鼠标/手指来中止单击,但有些用户知道,如果处理不当,您将陷入这种情况。MouseLeftButtonUp处理的工作原理相同,但我不建议依赖于此,因为它不是设计的,可能会有意外的变化或与其他控件冲突。
wyyhbhjk4#
有几个答案建议使用MouseLeftButton事件,但我看到了很多例子,这种方法是错误的。我建议把文本块(或其他控件)到一个按钮与自定义样式(删除所有边框/边距,除了内容控制)。这是好得多!
<Button Style={StaticResource OnlyContentStyle}> <Button.Content> <TextBlock /> </Button.Content> </Button>
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 ); } }
hs1rzwqc6#
听起来你只需要一个按钮。更改控件模板以删除边框样式等,并创建自己的(或清除现有的)视觉状态。或者甚至编辑它,使“凹陷”状态提供一点3D投影。此外,如果使用MVVM,还可以使用按钮上的命令。路加
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; }
我更喜欢添加一个事件,然后动态地完成其余的工作。
qvsjd97n8#
可以使用PointerReleased完成UWP控件的捕捉点击事件
8条答案
按热度按时间pjngdqdw1#
是的,有一个点击事件,叫做鼠标左键按下
pkbketx92#
我已经解决了这个问题,通过创建一个按钮与TextBlock内的模板如下:
这是一个有点多的标记,但你不需要写任何代码,它是由框架提供的,并正常工作。
irtuqstp3#
您可以使用手势支持关联单击事件。
**编辑:**通过这种方式,您的行为将与用户在操作过程中在显示屏上移动手指的单击(点击)一致。在鼠标按下、移开控制、鼠标抬起的情况下,单击将不会触发。点击手势的工作原理相同。并非所有用户都知道他们可以通过移动鼠标/手指来中止单击,但有些用户知道,如果处理不当,您将陷入这种情况。MouseLeftButtonUp处理的工作原理相同,但我不建议依赖于此,因为它不是设计的,可能会有意外的变化或与其他控件冲突。
wyyhbhjk4#
有几个答案建议使用MouseLeftButton事件,但我看到了很多例子,这种方法是错误的。我建议把文本块(或其他控件)到一个按钮与自定义样式(删除所有边框/边距,除了内容控制)。这是好得多!
uz75evzq5#
另一种方法是使用Seva的解决方案,但添加更多的内容,这样滚动就不会触发“点击”
hs1rzwqc6#
听起来你只需要一个按钮。更改控件模板以删除边框样式等,并创建自己的(或清除现有的)视觉状态。或者甚至编辑它,使“凹陷”状态提供一点3D投影。
此外,如果使用MVVM,还可以使用按钮上的命令。
路加
xzv2uavs7#
我更喜欢添加一个事件,然后动态地完成其余的工作。
qvsjd97n8#
可以使用PointerReleased完成UWP控件的捕捉点击事件