c# - WPF : How to bind Button's visibility inside ListBox ItemsControl using selecteditem information ?

标签 c# wpf listbox itemscontrol selecteditem

我有一个列表框绑定(bind)到一个 ObservableCollection of Items。每个 listboxItem 包含一些文本 block 和一些按钮。我只想在选择列表框项目或突出显示时显示 listboxItem 内的按钮。如果列表框项未突出显示,则应隐藏该按钮。我尝试使用 datatrigger 绑定(bind)到 IsSelected 属性。但是它不起作用。请指教。谢谢

        <ListBox Name="LayoutListBox" SelectedItem="{Binding Path=SelectedLayout, Mode=TwoWay}" ItemsSource="{Binding Layouts}" SelectionMode="Single" HorizontalContentAlignment="Stretch">
      <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
          <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Gray"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Gray"/>
          </Style.Resources>
        </Style>
      </ListBox.ItemContainerStyle>
      <ListBox.ItemTemplate>
        <DataTemplate>
          <Grid>
            <Grid.RowDefinitions>
              <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Border HorizontalAlignment="Stretch" Margin="2" CornerRadius="2" BorderBrush="#80808080" BorderThickness="1" Background="GhostWhite">
                    <Grid>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height ="*"/>
                                    <RowDefinition Height ="*"/>
                                </Grid.RowDefinitions>
                                <DockPanel Grid.Row="1" Grid.Column="3" DockPanel.Dock="Right">
                                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Visibility="{Binding Path=ViewName, Converter={StaticResource Converter}, ConverterParameter=false}">
                                        <Button ToolTip="Save">
                                            <Image Source="/Common.View;component/LayoutManager/View/Images/PushPin.png" />
                                        </Button>
                                        <Button Click="EditButtonClick" ToolTip="Edit">
                                            <Image Source="/Common.View;component/LayoutManager/View/Images/pencil.png" />
                                        </Button>
                                        <Button Click="DeleteButtonClick" ToolTip="Delete">
                                            <Image Source="/Common.View;component/LayoutManager/View/Images/cross.png" />
                                        </Button>
                                    </StackPanel>
                                </DockPanel>
                            </Grid>
                        </DockPanel>
                    </Grid>
                  </Border>
          </Grid>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>

最佳答案

我附上了一个简单的例子,当你选择时在列表框项目中显示按钮。它应该必须绑定(bind)为 RelativeSource 并且必须使用 Converter

示例:

<Window.Resources>
        <BooleanToVisibilityConverter x:Key="booleanVisibleConverter" />
    </Window.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding ObservableCollection}" Grid.Row="0" SelectedItem="{Binding Path=Item}" 
                 SelectionMode="Single" IsSynchronizedWithCurrentItem="True" Margin="1" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectedIndex="0">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding}" />
                        <Button Content=" X " Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected, Converter={StaticResource booleanVisibleConverter}}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

关于c# - WPF : How to bind Button's visibility inside ListBox ItemsControl using selecteditem information ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30876973/

相关文章:

c# - 在 ClassLibrary 中使用资源 (resx),无需重新编译即可更改

c# - 在 4.5 框架 WebApi 项目中使用 2.0 框架程序集

wpf - 在 WPF StatusBar 中显示抓取器?

c# - 将 PDF 转换为固定文档

c# - 边框不会显示在 WPF 控件中

c# - 具有 ContextMenu 单击事件的 WPF ListBox 项目

c# - GetHashCode() 为相同的对象值返回不同的值

delphi - 同步两个列表框的滚动条

forms - 是否可以在 VBA 的列表框中添加组合框作为列?

c# - 可以通过 $http 但不能通过 ngResource 调用 WCF 服务