मेरे पास एक सूची बॉक्स है जिसमें एक आइटम टेम्पलेट 2 स्टैकपैनल्स के साथ है। दूसरे स्टैकपैनल में एक टेक्स्टबॉक्स है जिसे मैं एक्सेस करना चाहता हूं। (इसे सत्य के लिए दृश्यता बदलें और उपयोगकर्ता इनपुट स्वीकार करें) ट्रिगर SelectionChangedEvent होना चाहिए। इसलिए, यदि कोई उपयोगकर्ता ListBoxItem पर क्लिक करता है, तो टेक्स्टब्लॉक अदृश्य हो जाता है और टेक्स्टबॉक्स दिखाई देता है।DataTemplate के साथ किसी सूची बॉक्स में किसी विशिष्ट आइटम को कैसे एक्सेस करें?
XAML कोड:
<ListBox Grid.Row="1" Name="ContactListBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ItemsSource="{Binding Contacts}" Margin="0,36,0,0" SelectionChanged="ContactListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Edit Contact" Click="ContactMenuItem_Click"/>
<toolkit:MenuItem Header="Delete Contact" Click="ContactMenuItem_Click"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<Grid>
<Rectangle Fill="{StaticResource PhoneAccentBrush}"
Width="72" Height="72">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="/Images/defaultContactImage.png" Stretch="UniformToFill"/>
</Rectangle.OpacityMask>
</Rectangle>
</Grid>
<StackPanel>
<TextBox Text="{Binding Name}" TextWrapping="Wrap" Visibility="Collapsed"/>
<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
<TextBlock Text="{Binding Number}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextAccentStyle}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
मुझे लगता है कि वहाँ इस को हल करने के कई तरीके हैं, लेकिन कुछ भी मैं काम करने की कोशिश की।
मेरे वर्तमान दृष्टिकोण इस
private void ContactListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBoxItem listBoxItem = ContactListBox.SelectedItem as ListBoxItem;
DataTemplate listBoxTemplate = listBoxItem.ContentTemplate;
// How to access the DataTemplate content?
StackPanel outerStackPanel = listBoxTemplate.XXX as StackPanel;
StackPanel innerStackPanel = outerStackPanel.Children[1] as StackPanel;
TextBox nameBox = innerStackPanel.Children[0] as TextBox;
TextBlock nameBlock = innerStackPanel.Children[1] as TextBlock;
nameBox.Visibility = System.Windows.Visibility.Visible;
nameBlock.Visibility = System.Windows.Visibility.Collapsed;
}
मुझे समाधान पसंद है, लेकिन अगर मेरे पास कुछ टेक्स्टब्लॉक हैं और मैं पहले लेकिन पूर्व को दृश्यमान/संक्षिप्त नहीं करना चाहता हूं। दूसरा या तीसरा? दूसरे शब्दों में निर्दिष्ट नाम के साथ सूची बॉक्स नियंत्रण में कैसे पहुंचे? – dargod
@ sust86 सूची में ** XXX ** क्या है BoxTemplate.XXX? – ROMAN
यदि आप नाम से पुन: प्रयास करना चाहते हैं, तो इस समाधान का उपयोग करें: http: // stackoverflow।com/a/1759923/3934111 –