Je suis un peu nouveau sur WPF et XAML. J'ai créé un Listbox
avec des éléments de zone de texte et je voulais que la zone de texte de l'élément sélectionné soit mise en évidence chaque fois que cet élément est sélectionné. Mon ami m'a suggéré d'utiliser ItemContainer
, et j'ai essayé d'utiliser un déclencheur avec une propriété setter de TextBox.IsFocused
, mais j'ai continué à obtenir une erreur IsFocused
ne peut pas être définie.Définir le focus sur une zone de texte sous une liste DataTemplate
Qu'est-ce qui n'a pas fonctionné? Ci-dessous mon code:
Mise à jour le XAML:
<DataTemplate x:Key="Template">
<Grid Margin="3">
<Border BorderThickness="2" BorderBrush="Black"
Background="{Binding RelativeSource=
{
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}
},
Path=Background
}" CornerRadius="4">
<StackPanel HorizontalAlignment="Stretch" Margin="3" >
<StackPanel.Style>
<Style>
<Setter Property="TextBlock.Foreground" Value="Black"></Setter>
</Style>
</StackPanel.Style>
<TextBlock Foreground="White" FontSize="18" TextWrapping="Wrap" Text="{Binding Path=BenefitDesc}"></TextBlock>
<Grid Margin="3" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Foreground="White" Margin="3" FontSize="16" TextWrapping="Wrap">Price:</TextBlock>
<TextBox x:Name="txtUpdate" FontSize="16" Grid.Column="1" TextWrapping="Wrap" Text="{Binding Path=Price}" Margin="3">
</TextBox>
</Grid>
</StackPanel>
</Border>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox x:Name="lsItem" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
HorizontalContentAlignment="Stretch" Background="#FF2CB7D2" SelectionChanged="lsBenPriceEditor_SelectionChanged"
ItemTemplate="{StaticResource Template}">
<ListBox.ItemContainerStyle>
<Style>
<Setter Property="Control.Padding" Value="0"></Setter>
<Style.Triggers>
<Trigger Property="ListBoxItem.IsSelected" Value="True">
<Setter Property="ListBoxItem.Background" Value="DarkRed" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>
Voir si http://stackoverflow.com/questions/329556/focus-on-a-textbox-in-a-datatemplate aide. –
@MattHamilton J'essaie la première réponse sur cette page et continue à rencontrer la méthode d'erreur n'existe pas sur la ligne donnée: var myTemplate = FindResource ("MyTemplateKey"); J'ai changé le var en élément de cadre, mais cette fois je reçois une référence d'objet d'erreur non définie à une référence d'un objet –
selon le commentaire sur cette réponse, assurez-vous de convertir la valeur de retour de FindResource en tant que DataTemplate. FindResource renvoie juste un System.Object. –