1
我對WPF和XAML很陌生。我用文本框項目製作了Listbox
,我希望所選項目的文本框在選擇該項目時得到關注。我的朋友建議我使用ItemContainer
,並且我嘗試使用一個觸發器,其設置屬性爲TextBox.IsFocused
,但我不斷收到一個不能設置錯誤的IsFocused
。將焦點設置爲List DataTemplate下的文本框
出了什麼問題?下面是我的代碼:
更新了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>
看看http://stackoverflow.com/questions/329556/focus-on-a-textbox-in-a-datatemplate幫助。 –
@MattHamilton我想在該頁面上的第一個答案,並不斷遇到錯誤的方法不存在於給定的行:var myTemplate = FindResource(「MyTemplateKey」);我將var更改爲Framework元素,但是這次我得到的錯誤對象引用未設置爲根據對該答案的評論對象 –
的引用,請確保將FindResource的返回值作爲DataTemplate進行投射。 FindResource只是返回一個System.Object。 –