Изменить прозрачность Grid

317
22 марта 2017, 14:40

Имеется вот такой вид:

<Window x:Class="SampleMVVM.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:SampleMVVM.Commands"
    Title="Main Window" Height="400" Width="350">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ListView ItemsSource="{Binding BooksList}" IsSynchronizedWithCurrentItem="True" Opacity="0.5">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border BorderBrush="Bisque" BorderThickness="1" Margin="10">
                        <StackPanel Margin="10">
                            <TextBlock Text="{Binding Title}" FontWeight="Bold"/>
                            <TextBlock Text="{Binding Author}" />
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Осталось:" />
                                <TextBlock Text="{Binding Count, Mode=TwoWay}" FontWeight="Bold" Margin="10,0"/>
                                <TextBlock Text="шт" />
                            </StackPanel>
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <ContentControl Grid.Column="1" Content="{Binding BooksList}">
            <ContentControl.ContentTemplate>
                <DataTemplate>
                    <Border BorderBrush="Bisque" BorderThickness="1" Margin="10">
                        <StackPanel Margin="10">
                            <TextBlock Text="Название:" />
                            <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,10"/>
                            <TextBlock Text="Автор:"/>
                            <TextBox Text="{Binding Author, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,10"/>
                            <StackPanel Orientation="Horizontal">
                                <Button Content="Выдать" Command="{Binding GiveItemCommand}" Margin="10,0" />
                                <Button Content="Забрать" Command="{Binding GetItemCommand}" Margin="10,0" />
                            </StackPanel>
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ContentControl.ContentTemplate>
        </ContentControl>
    </Grid>
</Window>

Как при фокусировке на "ContentControl" изменить прозрачность "ListView" на 0.5?

Обновлено.

Дополнительный вопрос: Как изменить прозрачность через модель? Пробовал сделать так. В модели разместил код:

private bool _isHidden;
public bool IsHidden
{
    get { return _isHidden; }
    set
    {
        _isHidden = value;
        OnPropertyChanged("IsHidden");
    }
}
public ICommand TestCommand
{
    get
    {
        return new DelegateCommand(new Action(() => {
            IsHidden = !_isHidden;
        }));
    }
}

Во View добавил кнопку и код в ListView:

<ListView.Style>
        <Style TargetType="ListView">
            <Stye.Triggers>                    
                <!-- если у элемента с именем CC фокус внутри, -->
                <DataTrigger Binding="{Binding Path=IsHidden}" Value="True">
                        <!-- устанавливаем Opacity в 0.5 -->
                        <Setter Property="Opacity" Value="0.5"/>
                 </DataTrigger>
            </Style.Triggers>
         </Style>
</ListView.Style>

По нажатию на кнопку, в коде вижу, что IsHidden меняется, но ListView не становится прозрачным.

Answer 1

Запросто. Воспользуйтесь DataTrigger'ом на свойство IsKeyboardFocusWithin.

Получится как-то так:

<!-- убрали явную установку opacity -->
<ListView ItemsSource="{Binding BooksList}" IsSynchronizedWithCurrentItem="True">
    <ListView.Style>
        <Style TargetType="ListView">
            <Style.Triggers>
                <!-- если у элемента с именем CC фокус внутри, -->
                <DataTrigger Binding="{Binding ElementName=CC, Path=IsKeyboardFocusWithin}"
                             Value="True">
                    <!-- устанавливаем Opacity в 0.5 -->
                    <Setter Property="Opacity" Value="0.5"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListView.Style>
    <ListView.ItemTemplate>
        <DataTemplate>
           <!-- тут ничего не меняем -->
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
<!-- даём имя, чтобы на него сослаться -->
<ContentControl Grid.Column="1" Content="{Binding BooksList}" Name="CC">
    <!-- ... -->
</ContentControl>
READ ALSO
При деплое проекта SharePoint в C# получаю ошибку: File not found

При деплое проекта SharePoint в C# получаю ошибку: File not found

Добрый деньЕсть C#-проект солюшена для SharePoint

379
Юнити Vector3.ClampMagnitude помогите разеснить.(c#) [требует правки]

Юнити Vector3.ClampMagnitude помогите разеснить.(c#) [требует правки]

Вот Vector3ClampMagnitude помогите пожалуйста разобраться не понимаю читал на Unity API не понел заранее спасибо

382
Такой цикл может быть в C#?

Такой цикл может быть в C#?

Случайно где-то нашел , но найти заново эту программу я не смогу

318
Cреднее значение из 3 чисел

Cреднее значение из 3 чисел

Метод должен возвращать только среднее (медиану) значение из 3 чисел, те отбрасывать максимальное и минмальное, а он всегда возвращает переменную...

399