我有列表框,数据模板是按钮:
<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>
我有这个listBox图像的两个图像背景(普通模式的normal.png,listBox中所选项目的click.png)
按钮列表中的listBox视图项,按钮图像背景通常是normal.png
我的问题是如何将按钮图像背景更改为click.png选定的一个,旧的选定按钮检索到normal.png
如何使用每行中的按钮更改listBox中所选项目的图像背景?
希望这清楚,请大约花一天时间来解决这个问题 任何人都可以提供帮助谢谢
答案 0 :(得分:1)
我还没有测试过,但你需要一些看起来像这样的代码:
<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>
我们的想法是直接绑定到IsSelected
对象的ListBoxItem
属性。这是使用RelativeSource
绑定完成的。但是,我猜这个代码没有做你想要的...我建议你可能想要使用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>
答案 1 :(得分:0)
如果您正在使用MVVM,那么在viewModel中创建一个属性并将其作为ImageSource绑定到ImageBrush, 当您在ListView中选择值时,然后获取所选记录并更改此属性的图像路径。
答案 2 :(得分:0)
尝试使用Togglebutton而不是button。使用触发器检查toggleButton的IsChecked属性何时更改。并基于此改变你的形象。