Silverlight:如何在单击子控件时将ListBoxItem设置为选中?

时间:2014-04-11 13:57:47

标签: silverlight listbox

在Silveright视图中,我有一个ListBox,其中的每个ListBoxItem都包含一个超级链接。默认情况下,点击ListBoxItem上的任意位置会将该项突出显示为已选中。我想要做的是覆盖默认选择行为,并使每个ListBoxItem内的超链接充当其父级的选择'句柄',以便仅在超链接时选择ListBoxItem单击,同时单击ListBoxItem上的任何其他位置无效。这是可能的,如果是这样,我怎么能实现它?

ItemTemplate的{​​{1}}:

ListBox

要将其置于某些上下文中,<ListBox.ItemTemplate> <DataTemplate> <Border BorderBrush="LightGray" BorderThickness="1"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width=".65*"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.Row="1" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding UploadDate, Converter={StaticResource DateDescriptionConverter}}"/> <TextBlock Grid.Column="1" Grid.Row="0" Margin="5,0,0,0" Text="{Binding HistoryStatus}" HorizontalAlignment="Left" VerticalAlignment="Center"/> <HyperlinkButton x:Name="DisplayDocument" CommandParameter="{Binding}" Grid.Column="2" Grid.Row="1" Content="View" HorizontalContentAlignment="Left" VerticalAlignment="Center" Margin="4"> <Interactivity:Interaction.Triggers> <Interactivity:EventTrigger EventName="Click"> <Interactions:CallMethodAction TargetObject="{Binding Path=DataContext, ElementName=DocumentViewPanel}" MethodName="ViewDocumentButtonClick"/> </Interactivity:EventTrigger> </Interactivity:Interaction.Triggers> </HyperlinkButton> </Grid> </Border> </DataTemplate> </ListBox.ItemTemplate> 的内容是文档列表,单击“超链接”会将文档加载到单独的窗格中。使用默认选择行为,通过单击ListBox中项目的背景,该项目可以显示为已选中,而不会实际加载相应的文档。

提前感谢您的任何答案。

1 个答案:

答案 0 :(得分:1)

我建议您从可用的基本控件范围中选择另一个control:我认为ItemsControl非常合适。

为什么呢? ListBox用于显示项目列表,无论何时单击项目的任何位置,都将选中该项目。这就是它的目的。 显然你不想要那个 - 我甚至不确定你是否想要&#34;选择&#34;一点都不。

据我了解:你想要一个可视的项目清单;每个提供至少一个您可以为该项目调用的操作,并且您希望可视化指示您已对项目执行了相关操作。

让我们尝试使用ItemsControl

执行此操作
<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                ....
                <Border
                   Background="Blue"
                   x:Name="DocumentDisplayed_Indicator"
                   Opacity="0"/>
                <HyperlinkButton ...>
                    <Interactivity:Interaction.Triggers>
                        <Interactivity:EventTrigger EventName="Click">
                            <Interactions:CallMethodAction
                                    TargetObject="{Binding Path=DataContext,
                                    ElementName=DocumentViewPanel}"
                                    MethodName="ViewDocumentButtonClick"/>
                            <SetPropertyAction
                                    TargetName="DocumentDisplayed_Indicator"
                                    Property="Opacity" Value="1"/>
                        </Interactivity:EventTrigger>
                    </Interactivity:Interaction.Triggers>
                </HyperlinkButton>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>