C#WPF - 如何将子项用作样式触发器

时间:2016-04-14 08:21:28

标签: c# wpf

所以我在Grid中有多个 StackPanel元素。 Grid元素的TextBlock元素为子级

我想要做的是设置Style,将Visibility属性更改为Collapsed ,如果 TextBlock' s Text属性为" 0 "。

到目前为止,我实现了TextBlock崩溃,但没有实现整体 Grid;代码如下:

    <StackPanel Grid.Column="1">

        <StackPanel.Resources>
            <Style>
                <Style.Triggers>
                    <Trigger Property="Text" Value="0">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Resources>

        <Grid Margin="5,0,5,5" >
            <TextBlock Text="If this value is 0, I want the whole parent grid to Collapse." Padding="5"/>
        </Grid>

        <Grid Margin="5,0,5,5" >
            <TextBlock Text="Thank you StackOverflow!" Padding="5"/>
        </Grid>

    </StackPanel>

1 个答案:

答案 0 :(得分:1)

要通过样式执行此操作,您可以使用元素名称。 E.g:

<StackPanel Grid.Column="1">
    <StackPanel.Style>
        <Style TargetType="StackPanel">
            <Style.Triggers>
                <!-- Here is how we bind to another control's property -->
                <DataTrigger Binding="{Binding Content, ElementName=SomexName}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>

    <Grid Margin="5,0,5,5" >
        <!-- You need to set this textbloc element name -->
        <TextBlock x:Name="SomexName" Text="If this value is 0, I want the whole parent grid to Collapse." Padding="5" />
    </Grid>

    <Grid Margin="5,0,5,5" >
        <TextBlock Text="Thank you StackOverflow!" Padding="5"/>
    </Grid>

</StackPanel>

虽然我建议使用MVVM并公开

  • IsVisible布尔属性,然后您可以使用布尔值来查看转换器

请参阅:Best Approach of setting the Visibility in MVVM