我有一个带有更改的datatemplate的ListBox(它包含一个超链接按钮和每个项目的文本框)。我希望默认情况下按钮不可见,但是当鼠标悬停在特定列表框项目上时,该按钮变为可见。我到目前为止尝试过的XAML不起作用,我无法弄清楚为什么(通过不起作用,我的意思是它无法编译)。
<ListBox Name="lstTest">
<ListBox.Template>
<ControlTemplate>
<ListBox ItemsSource="{Binding}">
<StackPanel >
<TextBlock Text="{Binding Path=Name}"/>
<HyperlinkButton Name="hypEdit" Content="Edit" Visibility="Collapsed" />
</StackPanel>
<ListBox.Triggers>
<EventTrigger RoutedEvent="ListBoxItem.MouseEnter" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="hypEdit" Storyboard.TargetProperty="Visibility"
From="Collapsed" To="Visible" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ListBox.Triggers>
</ListBox>
</ControlTemplate>
</ListBox.Template>
</ListBox>
答案 0 :(得分:2)
你得到什么编译错误?我可以编译它,但我不希望它能够工作。
您似乎已通过在其模板中定义另一个列表框来定义列表框。这是故意的吗?我原本期望基本项目模板看起来像这样(网格可选):
<ListBox Name="lstTest" ItemsSource="{Binding}>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel VerticalAlignment="Top">
<TextBlock Text="{Binding Name}"/>
<HyperlinkButton Content="Edit" />
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以下是我认为您所追求的完整工作示例:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
x:Class="SilverlightApplication1.SilverlightTrigger"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<ListBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.Resources>
<Storyboard x:Name="Storyboard1">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="hypEdit">
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Name="Storyboard2">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="hypEdit">
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<ei:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<ei:ControlStoryboardAction Storyboard="{StaticResource Storyboard2}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<StackPanel VerticalAlignment="Top">
<TextBlock TextWrapping="Wrap" Text="{Binding Name}" d:LayoutOverrides="Width"/>
<HyperlinkButton x:Name="hypEdit" Content="Edit" d:LayoutOverrides="Width" Visibility="Collapsed"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>
随意调整您自己的要求。