c# - (WPF) 如何使用每行中的按钮更改 listBox 中的按钮图像背景?

标签 c# wpf listbox datatemplate

我有列表框,数据模板是按钮:

 <ListBox  x:Name="lbname" ItemsSource="{Binding myCollection}">        
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Button x:Name="btnname" Content="{Binding name}" Click="btnname_Click">
                    <Button.Background>
                        <ImageBrush ImageSource="/myApplication;component/images/buttons/normal.png"/>
                    </Button.Background>
                </Button>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

我有两个用于此列表框图像的图像背景(normal.png 用于正常模式,click.png 用于列表框中的选定项目)

按钮列表中的listBox View 项,按钮图片背景一般为normal.png

我的问题是如何将所选按钮的按钮图像背景更改为 click.png,并将旧的所选按钮检索为 normal.png

如何使用每行中的按钮更改列表框中所选项目的图像背景?

希望这很清楚,请我花一天时间解决这个问题 谁能帮忙

谢谢

最佳答案

我还没有测试过,但是你需要一些看起来像这样的代码:

<ListBox x:Name="lbname" ItemsSource="{Binding myCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button x:Name="btnname" Click="btnname_Click">
                <Grid>
                    <Image>
                        <Image.Style>
                            <Style>
                                <Setter Property="Image.Source" 
Value="/myApplication;component/images/buttons/normal.png" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding IsSelected, 
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}" 
Value="True">
                                        <Setter Property="Image.Source" 
Value="/myApplication;component/images/buttons/click.png" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Image.Style>
                    </Image>
                    <TextBlock Text="{Binding name}" HorizontalAlignment="Center" 
VerticalAlignment="Center" />
                </Grid>
            </Button>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

想法是直接绑定(bind)到 ListBoxItem 对象的 IsSelected 属性。这是使用 RelativeSource 绑定(bind)完成的。但是,我猜这段代码不会做你想要的......我建议你可能想使用 ToggleButton 而不是......像这样:

<ListBox x:Name="lbname" ItemsSource="{Binding myCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ToggleButton x:Name="btnname" Click="btnname_Click" IsChecked="{Binding 
IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type 
ListBoxItem}}}">
                <Grid>
                    <Image>
                        <Image.Style>
                            <Style>
                                <Setter Property="Image.Source" 
Value="/myApplication;component/images/buttons/normal.png" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding IsSelected, 
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}" 
Value="True">
                                        <Setter Property="Image.Source" 
Value="/myApplication;component/images/buttons/click.png" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Image.Style>
                    </Image>
                    <TextBlock Text="{Binding name}" HorizontalAlignment="Center" 
VerticalAlignment="Center" />
                </Grid>
            </ToggleButton>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

关于c# - (WPF) 如何使用每行中的按钮更改 listBox 中的按钮图像背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18228428/

相关文章:

c# - Linq to Sql : Optimizing lamba expression - clean code

WPF SplashScreen ,如何使启动画面显示时间更长

c# - MVVM 如何将 ListBox SelectedItem 放入 ViewModel 中的类的实例中

c# - 从 ListBox 的 ScrollInfo 获取有效值

wpf - 如何在 WPF 中实现复选框列表框?

c# - 每种类型的最新记录?

c# - WPF UserControl MVVM如何关闭对话框

c# - 有没有正确的方法来创建 html src 路径?

wpf - WPF中的OverridesDefaultStyle

wpf - 如何在WPF ListView中以不同的颜色显示字符串?