ItemsControl изменить элементы во время выполнения - PullRequest
0 голосов
/ 02 декабря 2011

в моем проекте Silverlight у меня есть следующий ItemsControl:

<ItemsControl x:Name="ItemsList">
    <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Vertical" />
    </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <ItemsControl.ItemTemplate>
    <DataTemplate>

        <Border x:Name="brdItem" Opacity="1" MouseLeftButtonDown="brdItem_MouseLeftButtonDown">
            <TextBlock x:Name="txtUsername" Text="{Binding Username}" />
        </Border>

    </DataTemplate>
    </ItemsControl.ItemTemplate>

</ItemsControl>

Что я хочу, это: когда мой пользователь нажимает на элементЯ хочу, чтобы все остальные элементы непрозрачности были установлены на «0,3».Когда мышь отпущена, я хочу, чтобы все элементы вернулись в исходное состояние (Opacity = "1").

1 Ответ

2 голосов
/ 02 декабря 2011

Это очень просто, если использовать шаблон MVVM. Добавьте свойство Opacity к классу элементов и привяжите его к свойству Border.Opacity:

<Border x:Name="brdItem" Opacity="{Binding Opacity}" MouseLeftButtonDown="brdItem_MouseLeftButtonDown">
    <TextBlock x:Name="txtUsername" Text="{Binding Username}" />
</Border>

Класс товара:

public class ItemViewModel : INotifyPropertyChanged
{
    public string Username { get; set; }

    private double _opacity;

    public double Opacity
    {
        get { return _opacity; }
        set
        {
            _opacity = value;
            RaisePropertyChanged("Opacity");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

После этого ваше событие мыши будет выглядеть так:

* * 1010

Чтобы вернуться в исходное состояние, используйте следующий код:

this.ItemsList.ItemsSource.OfType<ItemViewModel>()
    .ToList().ForEach(item => item.Opacity = 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...