使用纯 XAML 中的 ToggleButton 更改网格可见性 属性

Change Grid Visibility property with ToggleButton in pure XAML

我有一个名为 comSection 的网格,我想用 ToggleButton 设置可见性:

未选中 = 已折叠

勾选 = 可见

Grid 和 ToggleButton 在 DataTemplateListBox

我在尝试访问 C# 中的可见性时遇到了很多麻烦:

comSection.Visibility = System.Windows.Visibility.Collapsed; //can't access this way

使用 PropertyChangedEventHandler 我无法使用它

所以我想知道是否可以在纯 XAML 中绑定可见性。也许使用 BooleanToVisibilityConverter.


编辑我的XAML

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="71*"/>
        <ColumnDefinition Width="580*"/>
    </Grid.ColumnDefinitions>
    <Grid x:Name="IssueList" Grid.Column="1">
        <ListBox x:Name="listBox" MouseDoubleClick="ListBox_MouseDoubleClick" BorderThickness="0,0,0,0" 
             ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch" 
             ItemsSource="{Binding Issues, Mode=OneWay}" Grid.Column="1" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid x:Name="grd">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100"/>
                            <ColumnDefinition Width="auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="auto"/>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>

                        <!-- Other code here -->


                        <!-- The ToggleButton -->
                        <ToggleButton x:Name="comSecButton" Width="10" Height="10" Click="comSection.Visibility = Collapsed" Background="Transparent" BorderThickness="0"
                                Grid.Column="2" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Bottom"
                                Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected, Converter={StaticResource booleanVisibleConverter}}">

                        </ToggleButton>

                        <!-- The Grid I want to show/hide -->
                        <Grid x:Name="comSection" Visibility="{Binding comSec_Click, Converter={StaticResource booleanVisibleConverter}}" Grid.Column="2" Grid.Row="2">

                            <TextBox x:Name="comment" HorizontalAlignment="Right"
                            Height="23" TextWrapping="Wrap" VerticalAlignment="Bottom" Width="148" />
                        </Grid>

                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

在网格样式中使用 DataTrigger:

<Grid x:Name="comSection" Grid.Column="2" Grid.Row="2">
    <Grid.Style>
        <Style TargetType="Grid">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=comSecButton}"
                             Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Style>
    ...
</Grid>