我有一个WP7应用程序,想要在其中拥有一个可"点击"的TextBlock
区域,当用户单击TextBlock
时,它会将其放入编辑模式(不同的控件)。
这将为用户编辑文本增加另一个明确的步骤。
TextBlock
没有单击事件(这并不让我感到惊讶)。
是否有任何方法可以实现此功能?包含在另一个控件中,或类似的东西?
我有一个WP7应用程序,想要在其中拥有一个可"点击"的TextBlock
区域,当用户单击TextBlock
时,它会将其放入编辑模式(不同的控件)。
这将为用户编辑文本增加另一个明确的步骤。
TextBlock
没有单击事件(这并不让我感到惊讶)。
是否有任何方法可以实现此功能?包含在另一个控件中,或类似的东西?
是的,有一个鼠标点击事件。它被称为MouseLeftButtonDown。
textBlock1.MouseLeftButtonDown +=new MouseButtonEventHandler(textBlock1_MouseLeftButtonDown);
private void textBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
我通过创建一个带有TextBlock的模板的按钮来解决了这个问题,代码如下:
<Button Click="button_Click">
<Button.Template>
<ControlTemplate>
<TextBlock ... />
</ControlTemplate>
</Button.Template>
</Button>
这需要更多的标记,但你不需要编写任何代码,它由框架提供并正常工作。
有一些答案建议使用MouseLeftButton事件,但我看到很多例子都行不通。我建议将TextBlock(或其他控件)放入带有自定义样式的Button中(除了内容控件外删除所有边框/边距)。这样做会更好得多!
<Button Style={StaticResource OnlyContentStyle}>
<Button.Content>
<TextBlock />
</Button.Content>
</Button>
OnlyContentStyle
样式。 - Ku6oprbool _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 );
}
}
看起来你只需要一个按钮。更改控件模板以去除边框样式等,并制作自己的(或清除现有的)可视状态。甚至可以编辑它,使“按下”状态给出一些三维投影。
此外,如果你正在使用MVVM,你也可以在按钮上使用命令。
Luke
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;
}
我更喜欢添加一个事件,然后动态完成其余的部分。