我有一个这样的 ListView:
<ListView x:Name="Thumbnails" HorizontalContentAlignment ="Left" VerticalContentAlignment="Top" Padding="0" Background ="#81AFD3" Grid.Row="6" Grid.Column="6" Grid.ColumnSpan="10" Grid.RowSpan="27" ScrollViewer.VerticalScrollBarVisibility="Visible" ItemsSource="{Binding NumberOfSlides}" SelectedItem="{Binding SelectedItem}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ThumbnailsSelectionChangedCommand}" CommandParameter="{Binding Thumbnails.SelectedIndex, Mode=OneWayToSource}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Content" Value="{StaticResource Thumbnail}" />
<Setter Property="Margin" Value="{Binding ActualWidth, ElementName=DummyRectangle2}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsSelected" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Blue"/>
</ListView.Resources>
</ListView>
并且列表的项目定义如下:
<Grid x:Key="Thumbnail" Width="{Binding ActualWidth, ElementName=DummyRectangle}" Height="{Binding ActualHeight, ElementName=DummyRectangle}" HorizontalAlignment="Center" VerticalAlignment="Top" Background="Transparent" >
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Image Name="thumbImage" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="14" Grid.RowSpan="7" Stretch="UniformToFill" Source="/MS_Show_Assets/ImportAssets/Test.jpg"></Image>
<StackPanel Name="Overlay" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="7" Background="LightBlue" Opacity="0.4"/>
<Button Name="slide_ON_OFF" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent" Command="{Binding SlideOnOffCommand}">
<Button.Template>
<ControlTemplate>
<Grid RenderTransformOrigin="0.5,0.5" x:Name="bg">
<Image Source="/MS_Show_Assets/ImportAssets/Visible_ON.png"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
<Button Name="fadein_ON_OFF" Grid.Row="3" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent">
<Button.Template>
<ControlTemplate>
<Grid RenderTransformOrigin="0.5,0.5" x:Name="bg">
<Image x:Name ="main_image" Source="/MS_Show_Assets/ImportAssets/Bulletpoint_ON.png"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
和 View 模型:
public CompositeCommand SlideOnOffCommand { get; set; }
SlideOnOffCommand = new CompositeCommand();
SlideOnOffCommand.RegisterCommand(new DelegateCommand(SlideOnOff));
private void SlideOnOff()
{
}
如您所见,列表项包含一些按钮。我将其中一个连接到 ViewModel 中的命令,但是单击时,不会调用订阅的方法。如何使这些按钮可点击?
最佳答案
您必须提供 RelativeSource
在按钮命令的命令绑定(bind)处。
您的命令应该类似于:
Command="{Binding DataContext.ThumbnailsSelectionChangedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Window} }"
如果 xaml 的根元素是 UserControl 而不是窗口,则绑定(bind)应如下所示:
Command="{Binding DataContext.ThumbnailsSelectionChangedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl} }"
关于c# - 如何单击 ListView 项中的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649249/