C# 将模板应用于按钮单击事件上的列表框

C# 将模板应用于按钮单击事件上的列表框,c#,wpf,listbox,datatemplate,C#,Wpf,Listbox,Datatemplate,我想在点击“btnDetails”按钮后将“detail”模板应用到列表框中 <Window> <Window.Resources> <DataTemplate x:Key="detail"> <TextBlock Text="ABC" Background="Yellow"/> </DataTemplate> <Style

我想在点击“btnDetails”按钮后将“detail”模板应用到列表框中

<Window>
    <Window.Resources>            
        <DataTemplate x:Key="detail">
            <TextBlock Text="ABC" Background="Yellow"/>
        </DataTemplate>

        <Style x:Key="MyItemStyle" TargetType="{x:Type ListBoxItem}">
            <Style.Triggers>
                <Trigger Property="Button.IsPressed" Value="True">
                    <Setter Property="Template" Value="{DynamicResource detail}"/>
                </Trigger>
            </Style.Triggers>
        </Style>    
    </Window.Resources>

    <StackPanel>
        <ListBox Name="lbDetails" ItemContainerStyle="{Binding MyItemStyle}"></ListBox>
        <Button Name="btnDetails">Details</Button>
    </StackPanel>

</Window>

细节
我尝试过上面的代码,但它不起作用。

Xaml

<Window.Resources>

    <DataTemplate x:Key="detail">
        <TextBlock Text="{Binding text}" Background="{Binding bg}"/>
    </DataTemplate>

</Window.Resources>

<StackPanel>
    <ListBox Name="lbDetails" ItemTemplate="{StaticResource detail}"/>               
    <Button Name="btnDetails" Height="35" Content="Add" Click="btnDetails_Click_1"/>           
</StackPanel>

c#

公共部分类主窗口:窗口
{
ObservableCollection lst=新的ObservableCollection();
公共主窗口()
{
初始化组件();
lbDetails.ItemsSource=lst;
}
私有void btnDetails\u Click\u 1(对象发送方,路由目标)
{
添加(新的listboxData(“Textblock”+lst.Count,新的SolidColorBrush(Colors.YellowGreen));
}
}
公共类listboxData
{
公共字符串文本{get;set;}
公共SolidColorBrush bg{get;set;}
公共listboxData(字符串文本,SolidColorBrush bg)
{
this.text=文本;
this.bg=bg;
}
}
Xaml

<Window.Resources>

    <DataTemplate x:Key="detail">
        <TextBlock Text="{Binding text}" Background="{Binding bg}"/>
    </DataTemplate>

</Window.Resources>

<StackPanel>
    <ListBox Name="lbDetails" ItemTemplate="{StaticResource detail}"/>               
    <Button Name="btnDetails" Height="35" Content="Add" Click="btnDetails_Click_1"/>           
</StackPanel>

c#

公共部分类主窗口:窗口
{
ObservableCollection lst=新的ObservableCollection();
公共主窗口()
{
初始化组件();
lbDetails.ItemsSource=lst;
}
私有void btnDetails\u Click\u 1(对象发送方,路由目标)
{
添加(新的listboxData(“Textblock”+lst.Count,新的SolidColorBrush(Colors.YellowGreen));
}
}
公共类listboxData
{
公共字符串文本{get;set;}
公共SolidColorBrush bg{get;set;}
公共listboxData(字符串文本,SolidColorBrush bg)
{
this.text=文本;
this.bg=bg;
}
}
Xaml

<Window.Resources>

    <DataTemplate x:Key="detail">
        <TextBlock Text="{Binding text}" Background="{Binding bg}"/>
    </DataTemplate>

</Window.Resources>

<StackPanel>
    <ListBox Name="lbDetails" ItemTemplate="{StaticResource detail}"/>               
    <Button Name="btnDetails" Height="35" Content="Add" Click="btnDetails_Click_1"/>           
</StackPanel>

c#

公共部分类主窗口:窗口
{
ObservableCollection lst=新的ObservableCollection();
公共主窗口()
{
初始化组件();
lbDetails.ItemsSource=lst;
}
私有void btnDetails\u Click\u 1(对象发送方,路由目标)
{
添加(新的listboxData(“Textblock”+lst.Count,新的SolidColorBrush(Colors.YellowGreen));
}
}
公共类listboxData
{
公共字符串文本{get;set;}
公共SolidColorBrush bg{get;set;}
公共listboxData(字符串文本,SolidColorBrush bg)
{
this.text=文本;
this.bg=bg;
}
}
Xaml

<Window.Resources>

    <DataTemplate x:Key="detail">
        <TextBlock Text="{Binding text}" Background="{Binding bg}"/>
    </DataTemplate>

</Window.Resources>

<StackPanel>
    <ListBox Name="lbDetails" ItemTemplate="{StaticResource detail}"/>               
    <Button Name="btnDetails" Height="35" Content="Add" Click="btnDetails_Click_1"/>           
</StackPanel>

c#

公共部分类主窗口:窗口
{
ObservableCollection lst=新的ObservableCollection();
公共主窗口()
{
初始化组件();
lbDetails.ItemsSource=lst;
}
私有void btnDetails\u Click\u 1(对象发送方,路由目标)
{
添加(新的listboxData(“Textblock”+lst.Count,新的SolidColorBrush(Colors.YellowGreen));
}
}
公共类listboxData
{
公共字符串文本{get;set;}
公共SolidColorBrush bg{get;set;}
公共listboxData(字符串文本,SolidColorBrush bg)
{
this.text=文本;
this.bg=bg;
}
}

以下是一个示例,当您按下按钮时,该示例将修改项目模板

使用按钮(按下开关)


虚拟项
细节
我确实将原始控件包装在内容控件的控件模板中,以实现对iPressed属性的控制

如果您想要一种切换按钮,那么下面是xaml

使用切换开关(开关)


虚拟项
细节

在上面的xaml中,我使用了切换按钮来代替常规按钮,以保留有关

的详细信息。下面是一个示例,当您按下按钮时,它将修改项目模板

使用按钮(按下开关)


虚拟项
细节
我确实将原始控件包装在内容控件的控件模板中,以实现对iPressed属性的控制

如果您想要一种切换按钮,那么下面是xaml

使用切换开关(开关)


虚拟项
细节

在上面的xaml中,我使用了切换按钮来代替常规按钮,以保留有关

的详细信息。下面是一个示例,当您按下按钮时,它将修改项目模板

使用按钮(按下开关)


虚拟项
细节
我确实在内容控件的c中包装了您的原始控件