如何在Silverlight数据网格中鼠标悬停显示图像

时间:2012-05-03 11:04:12

标签: silverlight

我只需要在silverlight 5上显示鼠标上的图像。 谁能帮帮我吗。 让我知道如何实现它......

<sdk:DataGridTemplateColumn x:Name="colDeleteContent" IsReadOnly="True" Header="Delete Content" Width="100" CanUserResize="False">
 <sdk:DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <StackPanel x:Name="spDeleteContent" VerticalAlignment="Center" Margin="10,0,0,0" Width="20" Height="20" HorizontalAlignment="Center" Orientation="Vertical">                                                            
    <Image x:Name="imgDeleteContent" Source="Assets/Images/close.png" Height="15" Width="15" Margin="0" MouseLeftButtonDown="imgDeleteContent_MouseLeftButtonDown" Cursor="Hand"/>                                                            
   </StackPanel>
  </DataTemplate>
 </sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>

1 个答案:

答案 0 :(得分:0)

有许多方法,OnFocus设置您的图像可见性可见和FocusLeft设置折叠基本上是您的主要元素。

但我发现你的样本上有DataTemplate。

所以有一些我想象的方式。

1)在DataTemplate中创建一个新组件而不是元素,例如

namespace ProjectBus
{

    public class StackPanelHasHiddenImage : Control
    {
        //You may don't need dependency property
        //It supports bindability
        #region dependency property
        public static Image GetMyProperty(DependencyObject obj)
        {
            return (Image)obj.GetValue(ImageProperty);
        }

        public static void SetMyProperty(DependencyObject obj, Image value)
        {
            obj.SetValue(ImageProperty, value);
        }

        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ImageProperty =
            DependencyProperty.RegisterAttached("Image", typeof(Image), typeof(StackPanelHasHiddenImage), new System.Windows.PropertyMetadata(null));
       #endregion

        public Image Image
        {
            get;
            set;
        }

        protected override void OnGotFocus(RoutedEventArgs e)
        {
            Image.Visibility = Visibility.Visible;
            base.OnGotFocus(e);
        }
        protected override void OnLostFocus(RoutedEventArgs e)
        {
            Image.Visibility = Visibility.Collapsed;
            base.OnLostFocus(e);
        }
    }
}

然后在您的xaml中使用

 <DataTemplate>
   <local:StackPanelHasHiddenImage Image="/ProjectBus;component/blabal.png"/>
</DataTemplate>

2)使用GotoStateAction行为 http://msdn.microsoft.com/en-us/library/ff723953%28v=expression.40%29.aspx但我发现它在DataTemplate中并使用它可能并不容易。

3)MainElement.FinChildByType&lt; StackPanel&gt;()。FirstOrDefault()不为null,然后将焦点和非焦点处理程序添加到代码隐藏中的此元素。但这是我主要避免使用的方法。

它有点难,因为它在模板中,因此在你的代码隐藏中无法看到模板中的命名对象。

希望帮助