Search code examples
c#wpfsetterstackpanelmultidatatrigger

MultiDataTrigger make stack panel children visible and colappsed


I have several properites that if that values are true,

I want the stack panel children to be visible if true. and collapsed if false.

as far as I understood I need to use MultiDataTriigers and condition.

however I am not sure where to put the setter protpery to Collapsed.

ataching ma XAML code:

<Style x:Key="ShowHideStyle" TargetType="StackPanel" >
        <Style.Triggers>
            <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                    <Condition Value="True">
                        <Condition.Binding>
                            <MultiBinding Converter="{StaticResource V_converter }">
                                <Binding Path="Type"></Binding>
                                <Binding Path="NodeID"></Binding>
                                <Binding Path="TLV"></Binding>
                            </MultiBinding>
                        </Condition.Binding>
                    </Condition>
                </MultiDataTrigger.Conditions>

                <MultiDataTrigger.Setters>
                    <Setter Property="Visibility" Value="Visible" />
                </MultiDataTrigger.Setters>                    
               </MultiDataTrigger>
        </Style.Triggers>
    </Style>

Solution

  • You could bind to several properties using a MultiBinding and set the Visibility property of the StackPanel to Visible only if the converter class that implements the IMultiValueConverter interface returns true:

    <Style x:Key="ShowHideStyle" TargetType="StackPanel">
        <!-- default Visibility: -->
        <Setter Property="Visibility" Value="Collapsed" />
        <Style.Triggers>
            <DataTrigger Value="True">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource V_converter}">
                        <Binding Path="Type" />
                        <Binding Path="NodeID" />
                        <Binding Path="TLV" />
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="Visibility" Value="Visible" />
            </DataTrigger>
        </Style.Triggers>
    </Style>