在Silverlight 4.0中,是否可以使用XAML绑定禁用某些ListBoxItem?
我在网上找到了一些解决方案,但没有任何适用于Silvelight 4.0的解决方案
谢谢!
Pileggi
答案 0 :(得分:1)
我的解决方案是:
<Style x:Key="modItemMainParts" TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid x:Name="g" Background="{TemplateBinding Background}">
...
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding abilitato}" Value="False">
<ei:ChangePropertyAction TargetObject="{Binding ElementName=g}" TargetName="IsHitTestVisible" Value="False" PropertyName="IsHitTestVisible"/>
<ei:ChangePropertyAction TargetObject="{Binding ElementName=g}" TargetName="Opacity" Value="0.5" PropertyName="Opacity"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
结论是预先确定的,当然可以解决一些问题,但是......
与WPF相比,在Silverlight中,DataTrigger(及其ChangePropertyAction)无法保留在模板内的控件内。并且ChangePropertyAction对象的属性TargetObject可以绑定,只链接模板内控件的名称(TargetObject =“{Binding ElementName = g}”)
由于这个原因,不可能将DataTrigger与整个Item绑定并设置它的属性IsEnabled,但是我们需要处理每个控件,并且我们需要在禁用它时重现Item的行为。特别是我们可以将包含所有其他控件的主Grid的属性IsHitTestVisible设置为False,以避免它负责鼠标输入。
最后在WPF中它更容易,但重要的是知道该怎么做。