Silverlight 4.0 отключает некоторые ListBoxItems с привязкой XAML - PullRequest
0 голосов
/ 23 ноября 2011

Возможно ли в Silverlight 4.0 отключить некоторые ListBoxItems с привязкой XAML?

В Интернете я нашел некоторые решения, но ничего не работает с Silvelight 4.0

Спасибо!

Пиледжи

1 Ответ

1 голос
/ 24 ноября 2011

Штаны, штаны! ... По крайней мере, я нашел решение, но это было трудно!

Мое решение:

<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) не может находиться в другом месте, кроме элемента управления внутри шаблона. А свойство TargetObject объекта ChangePropertyAction можно связать, только связывая имя элемента управления внутри шаблона (TargetObject = "{Binding ElementName = g}")

  • По этой причине невозможно связать DataTrigger со всем Item и установить его свойство IsEnabled, но нам нужно работать с каждым отдельным элементом управления и нам нужно воспроизводить поведение Item, когда он отключен. В частности, мы можем установить для свойства IsHitTestVisible главной таблицы, содержащего все остальные элементы управления, значение False, чтобы избежать ответственности за входные данные мыши.

Наконец, в WPF было гораздо проще, но важно знать, что делать.

...