Silverlight 4.0使用XAML绑定禁用某些ListBoxItems

时间:2011-11-23 11:02:44

标签: silverlight data-binding silverlight-4.0 listbox

在Silverlight 4.0中,是否可以使用XAML绑定禁用某些ListBoxItem?

我在网上找到了一些解决方案,但没有任何适用于Silvelight 4.0的解决方案

谢谢!

Pileggi

1 个答案:

答案 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中它更容易,但重要的是知道该怎么做。