Resize rectangle based on column Grid Width

Essentially what I want to do is, as the title says, if the column width is .50 then the rectangle should be red, if it is .75 then it should be amber and if it is 1 then it should be green.

I thought I could achieve this with DataTriggers, but for some reason I get the error "Object reference not set to an object instance", here is my code, am I missing something?

FYI the width property will be changed in the backend via timer_tick event.

<Grid x:Name="Grid1" Width="300" Height="30">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
        <ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.Triggers>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
            <Setter TargetName="rect" Property="Fill" Value="Red"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
            <Setter TargetName="rect" Property="Fill" Value="Yellow"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
            <Setter TargetName="rect" Property="Fill" Value="Green"></Setter>
        </DataTrigger>
    </Grid.Triggers>
    <Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"></Rectangle>
    <Rectangle Grid.Column="1" Fill="Blue"></Rectangle>

</Grid>

      

+2


a source to share


1 answer


This worked for me. Note: I used Style

to set triggers on Rectangle

.



<Grid x:Name="Grid1" Width="300" Height="30">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
        <ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch">
            <Rectangle.Style>
                <Style TargetType="{x:Type Rectangle}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
                            <Setter Property="Fill" Value="Red"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
                            <Setter Property="Fill" Value="Yellow"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
                            <Setter Property="Fill" Value="Green"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Rectangle.Style>
    </Rectangle>
    <Rectangle Grid.Column="1" Fill="Blue"></Rectangle>
</Grid>

      

+5


a source







All Articles