这是我上一篇文章的续集......
我PieChart
Legend
,我希望能够右键点击Legend
标题并复制该值。
所以这是Legend Mouse Right click Event
:
private void pieLegend_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
var hoveredItem = this.pieLegend.Items.FirstOrDefault(x => x.IsHovered);
Clipboard.SetText(hoveredItem.Title);
}
正如您所看到的,我复制了Clipboard
的值,但我想打开简单的Copy
菜单,因此我创建ContextMenu
并且我拥有ContextMenu Click Event
:< / p>
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
}
不在Click Event
内,我希望获得Clipboard
,但因为pieLegend_MouseRightButtonDown event
在Click Event
之前被解雇了我想找到一种方法来获取Clipboard
Static
价值。
所以我在考虑创建一个Event
变量,第一个Clipboard
将设置Click Event
值,而file >> B
只是获取此值,但我的问题是,如果这是最佳方式/适当的方式来做到这一点。
答案 0 :(得分:0)
嗯,做这两件事并没有错。
我认为你在考虑这个问题,你真的需要考虑你的要求。
在这种特殊情况下,我不建议使用剪贴板从这两个事件中传输数据。为什么?好吧,因为用户可以轻松地将其他东西复制到他们的剪贴板上,这可能与您的应用程序完全无关,因此可能是错误的。
所以,我希望定义一个私有变量或静态变量(这实际上取决于范围,如果你不需要定义一个静态变量)是正确的方法。
private string _HoveredItemTitle;
private void pieLegend_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
var hoveredItem = this.pieLegend.Items.FirstOrDefault(x => x.IsHovered);
Clipboard.SetText(hoveredItem.Title);
_HoveredItemTitle = hoveredItem.Title;
}
在你的另一种方法中,检查这个变量中是否有某些东西是个好主意,否则对于执行这个问题可能不是一个好主意。
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(_HoveredItemTitle))
{
//TODO: Something useful
return;
}
//TODO
}
我认为我试图了解的主要想法是,您应该确保用户可以做的任何事情(或尽可能少)导致您的应用程序出错。在这种情况下,将文本复制到剪贴板很不错,但它更像是功能而不是要求。应用程序不应该依赖剪贴板,只是因为剪贴板上可能存在完全无意义,而不是您实际期望的数据。