【发布时间】:2016-01-03 08:57:54
【问题描述】:
我正在编写一个通用 Windows 应用程序,并且我有一个 ListView,其中 ListViewItems 包含一个 TextBox 和一个 Button。当我单击文本框时,我希望该 ListViewItem 被选中。我找到了 WPF 的解决方案,但 Style.Triggers 在 UWP 中不可用。任何人都可以指出正确的方法吗?
<Page
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:controls="using:CycleStreetsUniversal.Controls"
xmlns:common="using:CycleStreetsUniversal.Common"
xmlns:utils="using:CycleStreetsUniversal.Utils"
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
xmlns:converters="using:CycleStreetsUniversal.Converters"
x:Class="CycleStreetsUniversal.Pages.HomePage"
mc:Ignorable="d" FontWeight="Light">
<Page.Resources>
<DataTemplate x:Key="DirectionItem">
<Grid Padding="8,6,0,6">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<AutoSuggestBox x:Name="autoSuggestBox" PlaceholderText="{Binding Watermark}" QueryIcon="Find" Text="{Binding LocationName}" />
<Button Grid.Column="2" Visibility="{Binding ShowAddButton, Converter={StaticResource BooleanToVisibilityConverter}}" />
<Button Grid.Column="1" Visibility="{Binding ShowMinusButton, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid x:Name="Directions" HorizontalAlignment="Left" Margin="0" Width="346" DataContext="{Binding DirectionPlanner, Mode=OneWay, Source={StaticResource Locator}}">
<Grid.Background>
<SolidColorBrush Color="{ThemeResource SystemAltHighColor}"/>
</Grid.Background>
<StackPanel VerticalAlignment="Top">
<ListView x:Name="DirectionEntryList" ItemTemplate="{StaticResource DirectionItem}" ItemsSource="{Binding Entries}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
<Button x:Name="crosshairButton" VerticalAlignment="Top" d:LayoutOverrides="LeftPosition, RightPosition" Margin="20,0" HorizontalAlignment="Stretch" Padding="0" Click="crosshairButton_Click">
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image x:Name="image" Source="ms-appx:///Assets/crosshair.png"/>
<TextBlock Text="Set Location to Crosshair" Grid.Column="1" VerticalAlignment="Center" MaxLines="2" TextWrapping="Wrap"/>
</Grid>
</Button>
</StackPanel>
</Grid>
</Grid>
</Page>
数据模板中的AutoSuggestBox需要将DirectionEntryList中的选中项设置为AutoSuggestBox是子项的List View项。
【问题讨论】:
-
您想使用或不使用代码隐藏吗?
-
理想情况下可以在多个元素上重复使用——不仅仅是 AutoCompleteBox
-
我会将 IsSelected 属性添加到项目的类并绑定到该属性并在我获得焦点或数据模板的其他事件时更改它