Получить значение буфера обмена из статической переменной
Так что продолжение моего последнего поста...
я имею 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
:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
}
Не внутри этого Click Event
я хочу получить Clipboard
но потому что pieLegend_MouseRightButtonDown event
уволен до этого Click Event
я хочу найти способ получить это Clipboard
значение. Так что я думал о создании Static
переменная, которая первая Event
установит Clipboard
значение и от Click Event
просто получите это значение, но мой вопрос в том, является ли это наилучшим / подходящим способом сделать это.
1 ответ
Ну, в этом нет ничего плохого.
Я думаю, что вы над этим думаете, вам действительно нужно учитывать ваши требования.
В этом конкретном сценарии я бы не предложил использовать буфер обмена для передачи данных из двух событий. Зачем? Ну, потому что пользователь может просто скопировать в буфер обмена что-то еще, что может быть совершенно не связано с вашим приложением, поэтому это может быть ошибочным.
Итак, я ожидаю, что определение закрытой или статической переменной (это действительно зависит от области видимости, вам не нужно определять статическую переменную, если вам не нужно) - это правильный путь.
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
}
Я думаю, что основная идея, которую я пытаюсь донести до вас, заключается в том, что вы должны убедиться, что пользователь ничего не может сделать (или как можно меньше), чтобы вызвать ошибки в вашем приложении. В этом случае копирование текста в буфер обмена - это хорошо, но это скорее функция, чем требование. Приложению не нужно полагаться на буфер обмена, просто потому что в буфере обмена может быть полная ерунда вместо данных, которые вы на самом деле ожидаете.