我有一个WP7应用程序,我希望有一个“可点击的”TextBlock
区域,当用户点击TextBlock
时,它会将其置于编辑模式(不同的控件)。
这将在编辑文本之前为用户添加另一个显式步骤。
TextBlock
没有点击事件(这并不让我感到惊讶)。
有没有办法做到这一点?包含在另一个控件或类似的东西中?
答案 0 :(得分:21)
是的,有点击事件。它叫做MouseLeftButtonDown
textBlock1.MouseLeftButtonDown +=new MouseButtonEventHandler(textBlock1_MouseLeftButtonDown);
private void textBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
答案 1 :(得分:12)
我已经通过在其模板中创建一个带有TextBlock的Button来解决这个问题:
<Button Click="button_Click">
<Button.Template>
<ControlTemplate>
<TextBlock ... />
</ControlTemplate>
</Button.Template>
</Button>
它有点标记,但您不需要编写任何代码,它由框架提供并且可以正常工作。
答案 2 :(得分:7)
您可以使用手势支持关联点击事件。
编辑:通过这样做,您的行为将与用户在操作期间在显示屏上移动手指的点击(点击)一致。点击不会在mousedown下触发,移开控制,mouseup。点按手势也是如此。并非所有用户都知道他们可以通过移动他们的鼠标/手指来中止点击,但有些用户会这样做,如果没有正确处理它,你就会被抓住。 MouseLeftButtonUp处理的工作方式相同,但我不建议依赖它,因为它不是设计上的,可能会出现意外的更改或与其他控件的冲突。
答案 3 :(得分:5)
有几个答案建议使用MouseLeftButton事件,但我看到了很多这种方法出错的例子。 我建议将TextBlock(或其他控件/控件)放入具有自定义样式的Button中(删除除内容控件之外的所有边框/边距)。它好多了!
<Button Style={StaticResource OnlyContentStyle}>
<Button.Content>
<TextBlock />
</Button.Content>
</Button>
答案 4 :(得分:3)
另一种方法是使用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 );
}
}
答案 5 :(得分:2)
听起来你只需要一个按钮。更改控件模板以删除边框样式等,并创建自己的(或清除现有的)可视状态。或者甚至编辑它以使“凹陷”状态给出一点3D投影。
此外,使用按钮,如果您使用MVVM,也可以使用按钮上的命令。
路
答案 6 :(得分:0)
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;
}
我更喜欢添加一个事件并动态完成其他事件。