C# WPF-捕获添加到样式(ListBoxItem)的按钮的单击
我为ListBoxItem的模板添加了一个按钮。我想知道如何捕捉按钮的点击(而不是选择ListboxItem) 按钮在UI中点击得很好,但我似乎无法找到如何连接代码以便捕获它 我尝试使用:C# WPF-捕获添加到样式(ListBoxItem)的按钮的单击,c#,wpf,events,styles,C#,Wpf,Events,Styles,我为ListBoxItem的模板添加了一个按钮。我想知道如何捕捉按钮的点击(而不是选择ListboxItem) 按钮在UI中点击得很好,但我似乎无法找到如何连接代码以便捕获它 我尝试使用: <EventSetter Event="Click" Handler="Button_Click"></EventSetter> 但这似乎是我们想要的。我找不到办法把它接到按钮上 以下是我正在使用的样式,以防它有所帮助: <Window x:Class="WIAssista
<EventSetter Event="Click" Handler="Button_Click"></EventSetter>
但这似乎是我们想要的。我找不到办法把它接到按钮上
以下是我正在使用的样式,以防它有所帮助:
<Window x:Class="WIAssistant.Main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="My App" Height="587" Width="1246" Name="MainForm" FontSize="14">
<Window.Resources>
<Style x:Key="CheckBoxListStyle" TargetType="ListBox">
<Style.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid ScrollViewer.CanContentScroll="True" Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox VerticalAlignment="Center" IsChecked="{Binding IsSelected,
RelativeSource={RelativeSource TemplatedParent},
Mode=TwoWay}" />
<TextBlock VerticalAlignment="Center" Grid.Column="1" Margin="5,0,5,0" Text="{Binding Id}" />
<TextBlock VerticalAlignment="Center" Grid.Column="2" Margin="5,0,5,0" Text="{Binding Title}" />
<Button HorizontalAlignment="Right" Grid.Column="3" Margin="5,0,5,0" Width="25">-></Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Style.Resources>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
</Style>
</Window.Resources>
... (In a grid in later code)
<ListBox SelectionMode="Multiple" Style="{StaticResource CheckBoxListStyle}"
Name="lstQueryResults" SelectionChanged="lstQueryResults_SelectionChanged">
</ListBox>
-
... (在后面代码中的网格中)
任何捕捉按钮点击的方法都将不胜感激。(注意,仅向按钮添加单击事件会出现一个错误,即使用
事件设置器如果您的模板被设置为数据模板,可能通过模板选择器,您可以将ICommand绑定到按钮,然后在presenter/视图模型/任何对象中处理命令的执行
除此之外,我不确定,尽管我不是WPF专家。事件处理程序的问题似乎是样式内部的样式。也请将样式保留在窗口资源中,尝试以下操作:
<Window.Resources>
<DataTemplate x:Key="ListBoxItemTemplate">
<Grid ScrollViewer.CanContentScroll="True" Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox VerticalAlignment="Center" IsChecked="{Binding IsSelected, Mode=TwoWay}" />
<TextBlock VerticalAlignment="Center" Grid.Column="1" Margin="5,0,5,0" Text="{Binding Id}" />
<TextBlock VerticalAlignment="Center" Grid.Column="2" Margin="5,0,5,0" Text="{Binding Title}" />
<Button HorizontalAlignment="Right" Grid.Column="3" Margin="5,0,5,0" Width="25" Click="Button_Click">-></Button>
</Grid>
</DataTemplate>
</Window.Resources>
-
+
模板中的EventSetter也可以工作,但VS中的设计视图显然停止工作。我也不是WPF专家。您所说的大部分内容对我来说都不具体。也许可以举个例子?查看Prism(来自Microsoft Patterns&Practices)这是一个很好地理解视图模型和命令的例子——它编译了吗?我也说到了这一点。但当我编译并运行它时,我说我需要使用EventHandler(因为它在样式模板中)是的,它编译和运行没有问题。我会立即发布代码。顺便说一句,我正在使用.NET 3.5.Ah,我应该发布更多的代码。我的错。我发布的XAML已经存在。我将用更多的XAML更新我的帖子。我将查看你发布的代码。也许我会那样使用它。问题似乎是st内部的风格yle…但是,您仍然可以使用键在窗口样式中将该模板声明为数据模板,然后将其指定为列表框的项目模板。更新响应:)
<ListBox ItemTemplate="{StaticResource ListBoxItemTemplate}" />