Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改controltemplate中Textblock的文本_C#_Wpf - Fatal编程技术网

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);
}