【发布时间】:2016-09-15 00:29:51
【问题描述】:
我有一个名为 comSection 的网格,我想用 ToggleButton 设置可见性:
未选中 = 折叠
选中 = 可见
Grid 和 ToggleButton 位于 DataTemplate 和 ListBox 内
我在尝试访问 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