1
votes

I have a scedule with subjects in it. When I turn on a specific mode I want to change the opacity of certain subjects. Therefore I have declared the property:

    private double _sceduleOpacity;
    public virtual double SceduleOpacity 
    {
        get
        {
            if (_sceduleOpacity == 0) return 0.9;
            else return _sceduleOpacity;
        }

        set { _sceduleOpacity = value; }
    }  

inside the Subject-Object. When the mode is set, the SceduleOpacity-Property of the specific Subject is changed to the desired value (I've checked that).

Now all I need is a binding to that Property so that it is visible on the UI. But that is where the problem is. I've tried several approaches:

  1. Bind it to the opacity of the DataTemplate:

GridView:

ItemTemplate="{Binding Mode=TwoWay, Source={StaticResource SceduleGridViewTemplate}}"

Resourcedictionary:

<DataTemplate x:Key="SceduleGridViewTemplate">    
    <Grid  Background="{Binding ColorHash, Converter={StaticResource HexToSolidColorBrushConverter}}"
            [...]
           Opacity="{Binding SceduleOpacity}">
           <TextBlock HorizontalAlignment="Center"
                    VerticalAlignment="Center" 
                    TextAlignment="Center"                        
                    FontSize="28" 
                    Text="{Binding Name}"/>
    </Grid>

This does not have any effect at all. But since the following binding:

    <Grid [...]>               
          <TextBlock HorizontalAlignment="Center"
                    VerticalAlignment="Center" 
                    TextAlignment="Center"                        
                    FontSize="28" 
                    Text="{Binding Name}"
                    Opacity="{Binding SceduleOpacity}"/>
    </Grid>

sets the opacity of the displayed text successfully, I went on looking what the problem might be.

  1. Bind it to the opacity of the Style or ItemContainerStyle:

I found out that the opacity of each GridView-Item is set by either in the Styles- or in the ItemContainerStyle-Templates. But still the bindings do not work at all:

GridView: Style="{Binding Source={StaticResource SceduleGridViewStyle}, Mode=TwoWay}">

Resourcedictionary:

<Style x:Key="SceduleItemStyle" TargetType="GridViewItem">
[...]
    <Setter Property="Opacity" Value="{Binding SceduleOpacity}"/> 
[...]</Style>

GridView: ItemContainerStyle="{Binding Source={StaticResource SceduleItemStyle}, Mode=TwoWay}">

Resourcedictionary:

<Style x:Key="SceduleGridViewStyle" TargetType="GridView">
[...]
    <Setter Property="Opacity" Value="{Binding SceduleOpacity}"/>
[...]</Style>

Do you have any idea on how I could fix that? Thank you very much!

1
How are you setting the DataContext of the control that has the the ScheduleOpacity property?123 456 789 0
Hey, I thought it would be automatically set to the ItemsSource wouldn't it? ThanksFunkyPeanut

1 Answers

0
votes

It worked now. I have had to set the Opacity of the DateTemplate-Item as follows:

<Grid.Background>
    <SolidColorBrush Color="{Binding ColorHash, 
                             Converter={StaticResource HexToSolidColorBrushConverter}}"
                     Opacity="{Binding SceduleOpacity}"/>
</Grid.Background>

Thanks for help!