Вот решение XAML. Просто добавьте этот стиль в свою кнопку. Это приведет к тому, что контекстное меню будет открыто как с левого, так и с правого щелчка. Наслаждайтесь!
<Button Content="Open Context Menu">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem />
<MenuItem />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
Потому что внутри метода styleDate
вы создаете новую переменную с тем же именем, что и день, и поэтому вы не можете получить доступ к методу дня. Используйте другое имя переменной, оно будет работать.
Напишите это так:
function styleDate(date) {
var verifyDay = new Date(date[0]);
var dayOfWeek = day(verifyDay.getDay()); //prints monday, tuesday, wednesday, etc
var year = verifyDay.getFullYear(); // prints the year
var month = month(verifyDay.getMonth());
// here
var new_day = verifyDay.getDate();
var date = new_day + nth(verifyDay.getDate());
return dayOfWeek + ", " + month + " " + date + " " + year;
}
Это потому, что ваша локальная переменная day
в styleDate
является теневым функцией, определенной за ее пределами. Переименуйте его в другое.
Если вы думаете, что он не должен быть затенен, потому что он определен после первого использования, JavaScript применяет подъем , который перемещает все объявления в начало функции, устанавливая их как неопределенные, пока они не будут установлены позже .
function styleDate(date) {
...
var myDay = verifyDay.getDate();
var date = myDay + nth(verifyDay.getDate());
...