C# 更改controltemplate中Textblock的文本
我有一个项目列表,用户可以选择,我想添加一个解释文本。到目前为止,我有这个代码C# 更改controltemplate中Textblock的文本,c#,wpf,C#,Wpf,我有一个项目列表,用户可以选择,我想添加一个解释文本。到目前为止,我有这个代码 <TabItem Name="TabItem02" Header=""> <ListBox Name="listBox01" VerticalAlignment="Stretch" SelectionMode="Multiple" HorizontalAlignment="Stretch&q
<TabItem Name="TabItem02" Header="">
<ListBox Name="listBox01" VerticalAlignment="Stretch" SelectionMode="Multiple" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectedValuePath="Content">
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<CheckBox Margin="5,2" IsChecked="{TemplateBinding IsSelected}" Grid.Column="0" VerticalAlignment="Top">
<ContentPresenter VerticalAlignment="Center">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<TextBlock Text="{TemplateBinding Content}" TextWrapping="Wrap" />
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</CheckBox>
<Expander Header="Explanation" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right" FlowDirection="RightToLeft">
<TextBlock TextWrapping="Wrap" FlowDirection="LeftToRight"/>
</Expander>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Resources>
<ListBoxItem Name="List1Item01" IsEnabled="False"/>
<ListBoxItem Name="List1Item02" IsEnabled="False"/>
<ListBoxItem Name="List1Item03" IsEnabled="False"/>
<ListBoxItem Name="List1Item04" IsEnabled="False"/>
<ListBoxItem Name="List1Item05" IsEnabled="False"/>
</ListBox>
</TabItem>
我想根据ListBoxItem
更改第二个TextBlock
(在扩展器中的那一个)的文本,它与通过ressourcefile的ListBox
内容本身一样简单。我不希望为每个具有单独名称的ListBoxItem
创建单独的扩展器
+TextBlock
因此,如果有人能为我的问题找到解决方案,我将不胜感激。你这样做是错误的。试试看,这会让事情变得容易得多。简言之,您可以将ListBox.ItemsSource
绑定到类似observateCollection
的内容,并简单地管理集合,同时控件将观察更改并自动更新自身。对于包含类的数据项,您可能还需要INotifyPropertyChanged
实现。虽然听起来很复杂,但它更容易使用。是的,它会解决问题。你可以打开我的个人资料,有很多指南式的WPF+MVVM相关答案。其中一些可能会让你感兴趣。谢谢你的回复,但我还没有尝试过mvvm,对于这个简单的项目,我不想改变整个架构,基本上从零开始学习这个新东西,尽管你说这很容易。我打算改天再调查一下,但现在我想让事情对我来说简单一点。你做得不对。试试看,这会让事情变得容易得多。简言之,您可以将ListBox.ItemsSource
绑定到类似observateCollection
的内容,并简单地管理集合,同时控件将观察更改并自动更新自身。对于包含类的数据项,您可能还需要INotifyPropertyChanged
实现。虽然听起来很复杂,但它更容易使用。是的,它会解决问题。你可以打开我的个人资料,有很多指南式的WPF+MVVM相关答案。其中一些可能会让你感兴趣。谢谢你的回复,但我还没有尝试过mvvm,对于这个简单的项目,我不想改变整个架构,基本上从零开始学习这个新东西,尽管你说这很容易。我将在以后的某一天研究这个问题,但现在我想让它对我来说很简单。
foreach (ListBox listBox in ListBoxes)
{
foreach (ListBoxItem item in listBox.Items) item.Content = resourceManager.GetString(item.Name);
}