【问题标题】:Change Grid Visibility property with ToggleButton in pure XAML在纯 XAML 中使用 ToggleButton 更改 Grid Visibility 属性
【发布时间】:2016-09-15 00:29:51
【问题描述】:

我有一个名为 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>

【问题讨论】:

  • 如果您发布您的 xaml 和代码,那么应该有人可以帮助您。方法有很多种,应该很简单,你说的那个转换器应该也可以。

标签: wpf xaml visibility


【解决方案1】:

在网格样式中使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2010-09-30
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多