ZIndex
到9999的按钮似乎没有帮助。
当鼠标移动到按钮上时,按钮第一次应该可见(但不显示图像),它们不会显示工具提示或出现。如果我使用键盘/鼠标键循环到另一个相册,按钮就会开始起作用。如果我再次选择,下一个艺术家有多个专辑的按钮开始表现。
注意:我实际上正在考虑放弃这种方法,但我想知道为什么我的代码不能工作。
当我第一次运行该程序时,该按钮不可见或不活动,但当选定唱片集并且同一艺术家有其他唱片集时,该按钮应变为活动(尽管由于没有文本或图像集而不可见)。
但是,对于选定的第一个符合条件的唱片集,不会发生这种情况。如果选择了符合这些条件的另一个唱片集,则按钮
变得可见并且行为正确。
所以看起来有些东西没有正确地初始化,但我不清楚我错过了什么。
<BitmapImage x:Key="NextAlbumSource" CacheOption="OnLoad"
CreateOptions="IgnoreImageCache" UriSource="resources/next.png"/>
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:AlbumChooser.Next}"
CanExecute="NextCanExecute" Executed="NextExecuted" />
</Window.CommandBindings>
<Button Height="50" Width="50" Margin="0,0,10,155"
Command="{x:Static local:AlbumChooser.Next}" Name="NextAlbum"
ToolTip="Next Album" HorizontalAlignment="Right"
VerticalAlignment="Bottom"
MouseEnter="NextAlbum_MouseEnter" MouseLeave="NextAlbum_MouseLeave">
<Image />
</Button>
那么在“MouseEnter”处理程序中,我有以下内容:
private void NextAlbum_MouseEnter(object sender, MouseEventArgs e)
{
if (haveAlbum && moreAlbumsBySameArtist)
{
((sender as Button).Content as Image).Source = this.nextImage;
}
}
private void NextAlbum_MouseLeave(object sender, MouseEventArgs e)
{
((sender as Button).Content as Image).Source = null;
}
然后,当选择相册时,我调用以下代码使下一个(和上一个)相册按钮可选。
Visibility navigationVisiblity = haveAlbum && moreAlbumsBySameArtist
? Visibility.Visible : Visibility.Hidden;
this.NextAlbum.Visibility = navigationVisiblity;
NextCanExecute
是相同的代码:
private void NextCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = haveAlbum && moreAlbumsBySameArtist;
e.Handled = true;
}
注:
haveAlbum
实际上是一个测试
!string.IsNullOrEmpty(this.albumPath.Text)
和
moreAlbumsBySameArtist
更新
我刚试着修改代码来设置
Opacity
而不是设置
Source
同样的问题也发生了。进一步的测试表明,事实上没有调用鼠标悬停事件处理程序。我不会在运行时添加或删除处理程序,所以看起来系统没有触发事件?
Visibility
很明显的影响到这个-有什么事情我必须在把它设置回
Visible
让事件处理程序重新连接?