从静态变量获取剪贴板值

时间:2015-07-28 13:59:27

标签: wpf clipboard

这是我上一篇文章的续集......

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 eventClick Event之前被解雇了我想找到一种方法来获取Clipboard Static价值。 所以我在考虑创建一个Event变量,第一个Clipboard将设置Click Event值,而file >> B只是获取此值,但我的问题是,如果这是最佳方式/适当的方式来做到这一点。

1 个答案:

答案 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
}

我认为我试图了解的主要想法是,您应该确保用户可以做的任何事情(或尽可能少)导致您的应用程序出错。在这种情况下,将文本复制到剪贴板很不错,但它更像是功能而不是要求。应用程序不应该依赖剪贴板,只是因为剪贴板上可能存在完全无意义,而不是您实际期望的数据。