我在Silverlight中有一个ListBox,里面有一个项目列表。每个项目都有一定数量的附加选项,其可用性取决于每个项目。
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<Button HorizontalAlignment="Right" x:Name="editDiarySecurityButton">
<Image Source="/xxx.yyy.Silverlight.Common;Component/Resources/Images/Icons/Ribbon/Small/editSecurity.png" Width="16" Height="16" />
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
按钮 editDiarySecurityButton 应根据该项目(代表日记)是否已应用安全性来处理。我可能只是修改图像的不透明度来反映这一点。
我的问题是如何实现这一目标?在ASP.NET中,我已经附加了ItemDataItemBound事件,但我不认为它在WPF / Silverlight中可用。
答案 0 :(得分:1)
如果我理解了您的要求,您将需要在对象上公开属性,并根据需要使用它来显示您的元素。即,要禁用该按钮,您可能会使用类似IsEnabled =“{Binding HasSecurity}”的内容。
答案 1 :(得分:1)
由于您特别询问了Opacity属性,因此将Button的Opacity属性绑定到DataContext上返回double的属性。添加属性所需的任何逻辑,以返回您对该项目所需的不透明度。像这样:
<Button HorizontalAlignment="Right" x:Name="editDiarySecurityButton"
Opacity="{Binding Path=ButtonOpacity, Mode=OneWay}">
<Image Source="/xxx.yyy.Silverlight.Common;Component/Resources/Images/Icons/Ribbon/Small/editSecurity.png" Width="16" Height="16" />
</Button>
然后在你的DataContext上:
public double ButtonOpacity
{
get {return _buttonOpacity; }
}
对要控制的Button的任何其他属性使用相同的构思。