我只需要在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>
氖
答案 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,然后将焦点和非焦点处理程序添加到代码隐藏中的此元素。但这是我主要避免使用的方法。
它有点难,因为它在模板中,因此在你的代码隐藏中无法看到模板中的命名对象。
希望帮助